Ich lade eine Datei mit Java auf S3 hoch - das habe ich bisher:
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()));
Die Datei wird hochgeladen, aber eine WARNUNG wird ausgelöst, wenn ich die Inhaltslänge nicht einstelle:
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.
Dies ist eine Datei, die ich hochlade, und die streamVariable ist eine InputStream, aus der ich das Byte-Array wie folgt abrufen kann : IOUtils.toByteArray(stream).
Wenn ich also versuche, die Inhaltslänge und MD5 (von hier übernommen ) wie folgt einzustellen :
// 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);
Der folgende Fehler wird von S3 zurückgegeben:
Das von Ihnen angegebene Content-MD5 war ungültig.
Was mache ich falsch?
Jede Hilfe geschätzt!
PS Ich bin in Google App Engine - Ich kann die Datei nicht auf die Festplatte schreiben oder eine temporäre Datei erstellen, da AppEngine FileOutputStream nicht unterstützt.