如何在amazon s3上添加字符串作爲文件?從我搜索的whaterver,我知道我們可以上傳一個文件到s3。上傳數據而不創建文件的最佳方式是什麼?如何將字符串寫入Amazon S3存儲桶?
回答
上傳數據 沒有創建文件的最佳方式是什麼?
如果你的意思是沒有在S3上創建文件,那麼你不能這麼做。在Amazon S3上,只有存儲數據的方式是以文件形式存在,或者使用更準確的術語,對象。一個對象可以包含 1個字節零字節到5太字節的數據,並存儲在存儲桶中。亞馬遜的S3 homepage lays out the basic facts quite clearly。 (對於AWS上的其他數據存儲選項,您可能需要閱讀(例如)關於SimpleDB。)
如果您的意思是不創建本地臨時文件,那麼答案取決於您使用的庫/工具。 (作爲RickMeasham建議,請添加更多詳細信息!)隨着s3cmd工具,例如,你不能跳過創建臨時文件,而用的JetS3t Java庫直接would be easy上傳字符串:
// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
S3中的對象也可以是零字節大小,而不是您建議的最小值。 :) – chilts 2012-06-08 03:00:16
你如何做到這一點使用亞馬遜API,S3Object的版本沒有這樣的構造函數 – 2015-04-24 09:13:42
不看起來不錯,但這裏是你如何使用Amazons Java客戶端來完成它,可能是JetS3t在幕後做了什麼。
private boolean putArtistPage(AmazonS3 s3,String bucketName, String key, String webpage)
{
try
{
byte[] contentAsBytes = webpage.getBytes("UTF-8");
ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(contentAsBytes);
ObjectMetadata md = new ObjectMetadata();
md.setContentLength(contentAsBytes.length);
s3.putObject(new PutObjectRequest(bucketname, key, contentsAsStream, md));
return true;
}
catch(AmazonServiceException e)
{
log.log(Level.SEVERE, e.getMessage(), e);
return false;
}
catch(Exception ex)
{
log.log(Level.SEVERE, ex.getMessage(), ex);
return false;
}
}
如果您使用的是Java,請https://ivan-site.com/2015/11/interact-with-s3-without-temp-files/
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.*;
import java.nio.charset.StandardCharsets;
class S3StreamJacksonTest {
private static final String S3_BUCKET_NAME = "bucket";
private static final String S3_KEY_NAME = "key";
private static final String CONTENT_TYPE = "application/json";
private static final AmazonS3 AMAZON_S3 = new AmazonS3Client();
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TestObject TEST_OBJECT = new TestObject("test", 123, 456L);
public void testUploadWithStream() throws JsonProcessingException {
String fileContentString = OBJECT_MAPPER.writeValueAsString(TEST_OBJECT);
byte[] fileContentBytes = fileContentString.getBytes(StandardCharsets.UTF_8);
InputStream fileInputStream = new ByteArrayInputStream(fileContentBytes);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(CONTENT_TYPE);
metadata.setContentLength(fileContentBytes.length);
PutObjectRequest putObjectRequest = new PutObjectRequest(
S3_BUCKET_NAME, S3_KEY_NAME, fileInputStream, metadata);
AMAZON_S3.putObject(putObjectRequest);
}
}
這個工作對我來說:
public static PutObjectResult WriteString(String bucket, String key, String stringToWrite, AmazonS3Client s3Client) {
ObjectMetadata meta = new ObjectMetadata();
meta.setContentMD5(new String(com.amazonaws.util.Base64.encode(DigestUtils.md5(stringToWrite))));
meta.setContentLength(stringToWrite.length());
InputStream stream = new ByteArrayInputStream(stringToWrite.getBytes(StandardCharsets.UTF_8));
return s3Client.putObject(bucket, key, stream, meta);
}
有一個overload for the AmazonS3.putObject method接受桶的字符串,一鍵串,和一串文字內容。我沒有看到在堆棧溢出中提到它,所以我把它放在這裏。這將是相似的@ Jonik的答案,但沒有額外的依賴。
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);
有一個簡單的方法用PHP來做到這一點,只需發送字符串作爲對象的身體,在密鑰的指定新的文件的名稱 -
$s3->putObject(array(
'Bucket' => [Bucket name],
'Key' => [path/to/file.ext],
'Body' => [Your string goes here],
'ContentType' => [specify mimetype if you want],
));
這將創建根據指定鍵創建一個新文件,該文件具有在字符串中指定的內容。
我很驚訝沒有人在這裏有正確的答案。有關Java API,請參閱 official documentation。
s3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, fileName, rawString));
欲瞭解更多編程語言,請查詢here。
是不是[redirectLocation](https://docs.aws.amazon。com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/PutObjectRequest.html#PutObjectRequest-java.lang.String-java.lang.String-java.lang.String-)? – Valentin 2018-02-03 17:00:13
根據[文檔](https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html)。這是如何完成的。 – 2018-02-05 12:30:54
這篇文檔是關於上傳文件的,沒有關於將內容上傳爲字符串的內容。最簡單和正確的解決方案在這裏 - https://stackoverflow.com/a/42510981/7374267 – Valentin 2018-02-05 19:23:40
- 1. Amazon S3存儲桶策略
- 2. 將base64字符串保存到Amazon S3
- 3. 如何將S3存儲桶策略寫入文件?
- 4. AWS Lambda Java,寫入S3存儲桶
- 5. 如何將Amazon S3存儲桶權限設置爲IAM用戶?
- 6. 如何將SSL證書添加到amazon s3存儲桶?
- 7. 如何將Amazon S3存儲桶轉移到其他帳戶?
- 8. 如何實現一次性寫入AWS S3存儲桶?
- 9. Amazon S3:如何獲取存儲桶中的文件夾列表?
- 10. 如何從URL獲取Amazon AWS S3存儲桶中的文件?
- 11. 如何備份或同步Amazon S3存儲桶?
- 12. 如何按修改日期列出Amazon S3存儲桶內容?
- 13. 如何使用Node.js獲取Amazon S3存儲桶的總大小?
- 14. 如何撤銷Amazon S3存儲桶中的公共權限
- 15. Amazon Glacier可以鏡像Amazon S3存儲桶嗎?
- 16. 的NodeJS LAMBDA S3存儲桶
- 17. 將數據從Cloudera移動到Amazon S3存儲桶
- 18. 將Amazon S3存儲桶連接到其他服務器 - IAM
- 19. 將Amazon S3存儲桶映射到網站上的用戶
- 20. 將多個子域映射到同一Amazon S3存儲桶
- 21. 將圖像上傳到Amazon S3存儲桶,.NETCore2
- 22. Amazon S3存儲桶策略用於匿名上傳照片到存儲桶
- 23. AWS Lambda:如何提取S3存儲桶中的tgz文件並將其放入另一個S3存儲桶中
- 24. 寫作JSON在S3存儲桶文件
- 25. Android亞馬遜s3存儲桶
- 26. 如何將AMI文件存儲到S3存儲桶?
- 27. 如何將S3存儲桶裝載到EC2實例並使用PHP寫入?
- 28. 如何將多個域映射到Amazon S3上的同一存儲桶?
- 29. 上傳到S3存儲桶
- 30. 將1and1域指向S3存儲桶
如果你的問題有更多的細節,我建議你會得到更多的幫助。比如你正在寫什麼語言,以及你用什麼庫來與S3交互。 – RickMeasham 2010-04-04 09:07:57