Java kullanarak S3'e bir dosya yüklüyorum - şu ana kadar elde ettiğim şey bu:
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()));
Dosya yükleniyor ancak içerik uzunluğunu ayarlamadığım zaman bir UYARI gönderiliyor:
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.
Bu benim yüklüyorum bir dosyadır ve stream
değişken bir olduğunu InputStream
böyle bayt dizisi alabilirsiniz hangi,: IOUtils.toByteArray(stream)
.
Dolayısıyla, içerik uzunluğunu ve MD5'i ( buradan alınmıştır ) şu şekilde ayarlamaya çalıştığımda :
// 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);
Aşağıdaki hatanın S3'ten geri gelmesine neden olur:
Belirttiğiniz Content-MD5 geçersizdi.
Neyi yanlış yapıyorum?
Herhangi bir yardım için minnettarız!
Not : Google App Engine kullanıyorum - AppEngine FileOutputStream'i desteklemediği için dosyayı diske yazamıyorum veya geçici dosya oluşturamıyorum .