Я завантажую файл на S3 за допомогою Java - це те, що я отримав на даний момент:
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()));
Файл завантажується, але ПОПЕРЕДЖЕННЯ піднімається, коли я не встановлюю довжину вмісту:
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.
Це файл я відправляю і stream
змінна є InputStream
, з якого я можу отримати масив байтів , як це: IOUtils.toByteArray(stream)
.
Отже, коли я намагаюся встановити довжину вмісту та MD5 (взято звідси ) таким чином:
// 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);
Це призводить до появи такої помилки з S3:
Вказаний вами Content-MD5 був недійсним.
Що я роблю не так?
Будь-яка допомога оцінена!
PS Я працюю в Google App Engine - я не можу записати файл на диск або створити тимчасовий файл, оскільки AppEngine не підтримує FileOutputStream.