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 streamdeğişken bir olduğunu InputStreambö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 .