Làm cách nào để thêm chuỗi dưới dạng tệp trên amazon s3? Từ người tôi tìm kiếm, tôi đã biết rằng chúng tôi có thể tải tệp lên s3. Cách tốt nhất để tải lên dữ liệu mà không cần tạo tệp là gì?Làm thế nào để viết một chuỗi vào thùng S3 của Amazon?
Trả lời
Cách tốt nhất để tải lên dữ liệu mà không cần tạo tệp là gì?
Nếu bạn có nghĩa là không tạo tệp trên S3, tốt, bạn không thể thực sự làm điều đó. Trên Amazon S3, chỉ cách lưu trữ dữ liệu dưới dạng tệp hoặc sử dụng thuật ngữ chính xác hơn, đối tượng. Một đối tượng có thể chứa từ 1 byte 0 byte đến 5 terabyte dữ liệu và được lưu trữ trong một thùng . Amazon S3 homepage lays out the basic facts quite clearly. (Đối với các tùy chọn lưu trữ dữ liệu khác trên AWS, bạn có thể muốn đọc ví dụ: SimpleDB.)
Nếu bạn muốn tạo tệp tạm thời cục bộ thì câu trả lời tùy thuộc vào thư viện/công cụ bạn đang sử dụng. (Như RickMeasham gợi ý, xin vui lòng bổ sung thêm chi tiết!) Với công cụ s3cmd, ví dụ, bạn không thể bỏ qua việc tạo ra tập tin tạm thời, trong khi với các thư viện Java JetS3t tải lên một String trực tiếp would be easy:
// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
Một đối tượng trong S3 cũng có thể có kích thước bằng 0 byte, không phải là đối tượng tối thiểu như bạn đề xuất. :) – chilts
Cách bạn thực hiện điều này bằng cách sử dụng API Amazons, phiên bản S3Object không có hàm tạo như vậy –
Liệu không trông đẹp, nhưng đây là cách bạn có thể làm điều đó bằng cách sử dụng Amazon khách hàng Amazon, có lẽ những gì JetS3t làm đằng sau hậu trường anyway.
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;
}
}
Nếu bạn đang sử dụng java, hãy kiểm tra 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);
}
}
này làm việc cho tôi:
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);
}
Có một overload for the AmazonS3.putObject method chấp nhận chuỗi xô, một chuỗi chìa khóa, và một chuỗi nội dung văn bản. Tôi đã không nhìn thấy đề cập đến nó trên stack tràn vì vậy tôi đặt này ở đây. Nó sẽ tương tự như câu trả lời của @ Jonik, nhưng không có sự phụ thuộc bổ sung.
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);
Có một cách đơn giản để làm điều đó với PHP, chỉ cần gửi các chuỗi như cơ thể của đối tượng, xác định tên của tập tin mới trong khóa -
$s3->putObject(array(
'Bucket' => [Bucket name],
'Key' => [path/to/file.ext],
'Body' => [Your string goes here],
'ContentType' => [specify mimetype if you want],
));
này sẽ tạo tệp mới theo khóa được chỉ định, có nội dung như được chỉ định trong chuỗi.
Tôi ngạc nhiên không ai có câu trả lời đúng ở đây. Xem official documentation tại đây cho API Java.
s3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, fileName, rawString));
Để biết thêm ngôn ngữ lập trình, vui lòng kiểm tra here.
Không phải là [redirectLocation] (https: //docs.aws.amazon.com/AWSJavaSDK/mới nhất/javadoc/com/amazonaws/services/s3/model/PutObjectRequest.html # PutObjectRequest-java.lang.String-java.lang.String-java.lang.String-)? – Valentin
Theo [tài liệu] (https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html). Đó là cách nó được thực hiện. –
Tài liệu này là về tải lên tệp, không có gì về việc tải lên nội dung dưới dạng Chuỗi. Giải pháp đơn giản và chính xác nhất là ở đây - https://stackoverflow.com/a/42510981/7374267 – Valentin
- 1. Thêm thư mục vào thùng Amazon s3
- 2. Thêm tệp vào thùng trên Amazon S3 bằng C#
- 3. Làm thế nào để tạo liên kết tải xuống cho đối tượng thùng của Amazon S3?
- 4. Làm thế nào để liệt kê các đối tượng _all_ trong thùng chứa S3 của Amazon?
- 5. cách xóa tệp khỏi thùng amazon s3?
- 6. Amazon S3 Url viết lại
- 7. Làm thế nào để xác định quyền ở Amazon s3
- 8. Chuyển vùng Amazon S3?
- 9. Có ai đã từng đọc hoặc viết giới hạn trên cho một thùng S3 của Amazon không?
- 10. Gửi dữ liệu biểu mẫu tới thùng Amazon S3
- 11. Làm thế nào để cấu hình django-máy nén và django-staticfiles với S3 của Amazon?
- 12. Làm thế nào để bạn đổi tên một thư mục trong một thùng trên S3?
- 13. Boto Amazon S3: Làm cách nào để đổi tên một tệp trong một nhóm?
- 14. Làm thế nào để lưu trữ các tệp PDF tôm vào Amazon S3
- 15. Xóa các phiên bản của mỗi tệp trong một thùng S3 của Amazon cũ hơn X ngày
- 16. Làm cách nào để ánh xạ nhiều miền vào cùng một nhóm trên Amazon S3?
- 17. Triển khai Cloudfront của Amazon S3
- 18. Làm thế nào để sao chép một khóa trong Amazon S3 bằng cách sử dụng Python (và boto)?
- 19. Làm thế nào tôi có thể gắn một thùng S3 vào một cá thể EC2 và ghi vào nó bằng PHP?
- 20. Phản ứng của Amazon S3 trong JSON?
- 21. Đồng bộ hóa thư mục S3/thùng
- 22. Tại sao amazon s3 của tôi chậm?
- 23. Amazon S3 & Checksum
- 24. Kiến trúc Amazon S3
- 25. Làm thế nào an toàn để gọi dịch vụ Amazon S3 từ iPhone?
- 26. Tôi làm cách nào để tải xuống tệp từ thùng S3 với wget?
- 27. Trong vùng địa lý nào là thùng S3 của tôi được lưu trữ?
- 28. làm thế nào để lưu trữ hình ảnh cồng kềnh trên Amazon S3?
- 29. Có cách nào để chạm() trong Amazon S3 không?
- 30. PHP/Amazon S3: Xác thực chuỗi truy vấn
Tôi khuyên bạn nên nhận thêm trợ giúp nếu câu hỏi của bạn có nhiều chi tiết hơn. Chẳng hạn như ngôn ngữ bạn đang viết và thư viện nào, nếu có, bạn đang sử dụng để tương tác với S3. – RickMeasham