fireProgressEvent(progressListener, ProgressEvent.PART_STARTED_EVENT_CODE);
}
try {
request.setContent(inputStream);
ObjectMetadata metadata = invoke(request, new S3MetadataResponseHandler(), bucketName, key);
if (metadata != null && md5DigestStream != null) {
String contentMd5 = BinaryUtils.toBase64(md5DigestStream.getMd5Digest());
byte[] clientSideHash = BinaryUtils.fromBase64(contentMd5);
byte[] serverSideHash = BinaryUtils.fromHex(metadata.getETag());
if (!Arrays.equals(clientSideHash, serverSideHash)) {
fireProgressEvent(progressListener, ProgressEvent.FAILED_EVENT_CODE);
throw new AmazonClientException("Unable to verify integrity of data upload. " +
"Client calculated content hash didn't match hash calculated by Amazon S3. " +
"You may need to delete the data stored in Amazon S3.");
}
}
fireProgressEvent(progressListener, ProgressEvent.PART_COMPLETED_EVENT_CODE);
UploadPartResult result = new UploadPartResult();
result.setETag(metadata.getETag());
result.setPartNumber(partNumber);
result.setServerSideEncryption(metadata.getServerSideEncryption());
return result;
} catch (AmazonClientException ace) {
fireProgressEvent(progressListener, ProgressEvent.PART_FAILED_EVENT_CODE);
throw ace;
} finally {