Tôi đang tải một tệp lên S3 bằng Java - đây là những gì tôi nhận được cho đến nay:
AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials("XX","YY"));
List<Bucket> buckets = s3.listBuckets();
s3.putObject(new PutObjectRequest(buckets.get(0).getName(), fileName, stream, new ObjectMetadata()));
Tệp đang được tải lên nhưng CẢNH BÁO được đưa ra khi tôi không đặt độ dài nội dung:
com.amazonaws.services.s3.AmazonS3Client putObject: No content length specified for stream > data. Stream contents will be buffered in memory and could result in out of memory errors.
Đây là một tập tin tôi tải lên và stream
biến là một InputStream
, từ đó tôi có thể lấy mảng byte như thế này: IOUtils.toByteArray(stream)
.
Vì vậy, khi tôi cố gắng đặt độ dài nội dung và MD5 (lấy từ đây ) như thế này:
// get MD5 base64 hash
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(IOUtils.toByteArray(stream));
byte[] resultByte = messageDigest.digest();
String hashtext = new String(Hex.encodeHex(resultByte));
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(IOUtils.toByteArray(stream).length);
meta.setContentMD5(hashtext);
Nó gây ra lỗi sau quay lại từ S3:
Nội dung-MD5 bạn đã chỉ định không hợp lệ.
Tôi đang làm gì sai?
Bất kỳ sự giúp đỡ nào được đánh giá cao!
Tái bút Tôi đang sử dụng Google App Engine - Tôi không thể ghi tệp vào đĩa hoặc tạo tệp tạm thời vì AppEngine không hỗ trợ FileOutputStream.