sto caricando un file da S3 utilizzando Java - questo è quello che ho ottenuto finora:AmazonS3 putObject con l'esempio di lunghezza InputStream
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()));
Il file viene caricato, ma un WARNING viene generato quando non sto impostando la lunghezza del contenuto:
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.
questo è un file sto caricando e la variabile stream
è un InputStream
, da cui posso ottenere l'array di byte in questo modo: 0.123..
Così, quando provo a impostare la lunghezza del contenuto e MD5 (tratto da here) come questo:
// 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);
provoca il seguente errore di tornare da S3:
Il Contenuto: MD5 specificato non è valido.
Cosa sto sbagliando?
Qualsiasi aiuto apprezzato!
P.S. Sono su Google App Engine - Non riesco a scrivere il file su disco o create a temp file perché AppEngine non supporta FileOutputStream.
E abbiamo una winnahhhh! Grazie per lo sforzo extra di risposta al problema MD5. Questa è la parte che stavo cercando ... –
Yoh, i veri uomini MVP! –
Qual è il contenuto in questo caso? non l'ho capito Sto avendo lo stesso avvertimento. Un piccolo aiuto, per favore.? – Shaonline