String uploadId = initiateResult.getUploadId();
try {
<<<<<<< HEAD
List binaryChecksums = new LinkedList();
long currentPosition = 0;
while (currentPosition < file.length()) {
long length = partSize;
if (currentPosition + partSize > file.length()) {
length = file.length() - currentPosition;
}
Exception failedException = null;
boolean completed = false;
int tries = 0;
while(!completed && tries<5){
tries++;
InputStream inputSubStream = newInputSubstream(file, currentPosition, length);
inputSubStream.mark(-1);
String checksum = TreeHashGenerator.calculateTreeHash(inputSubStream);
byte[] binaryChecksum = BinaryUtils.fromHex(checksum);
inputSubStream.reset();
try {
glacier.uploadMultipartPart(new UploadMultipartPartRequest()
.withAccountId(accountId)
.withChecksum(checksum)
.withBody(inputSubStream)
.withRange("bytes " + currentPosition + "-" + (currentPosition + length - 1) + "/*")
.withUploadId(uploadId)
.withVaultName(vaultName));
completed = true;
binaryChecksums.add(binaryChecksum);
} catch (Exception e){
failedException = e;
} finally {
try {inputSubStream.close();} catch (Exception e) {}
}
}
if(!completed && failedException!=null){
throw failedException;
}
currentPosition += partSize;
}
String checksum = TreeHashGenerator.calculateTreeHash(binaryChecksums);
String archiveSize = Long.toString(file.length());
CompleteMultipartUploadResult completeMultipartUploadResult =
glacier.completeMultipartUpload(new CompleteMultipartUploadRequest()
.withAccountId(accountId)
.withArchiveSize(archiveSize)
.withVaultName(vaultName)
.withChecksum(checksum)
.withUploadId(uploadId));
String artifactId = completeMultipartUploadResult.getArchiveId();
return new UploadResult(artifactId);
} catch (Exception e) {
glacier.abortMultipartUpload(new AbortMultipartUploadRequest(accountId, vaultName, uploadId));
throw new AmazonClientException("Unable to finish the upload", e);
}
=======
List binaryChecksums = new LinkedList();
long currentPosition = 0;
while (currentPosition < file.length()) {
long length = partSize;
if (currentPosition + partSize > file.length()) {
length = file.length() - currentPosition;
}
inputSubStream.mark(-1);
InputStream inputSubStream = newInputSubstream(file, currentPosition, length);
String checksum = TreeHashGenerator.calculateTreeHash(inputSubStream);
byte[] binaryChecksum = BinaryUtils.fromHex(checksum);
binaryChecksums.add(binaryChecksum);
inputSubStream.reset();
try {
glacier.uploadMultipartPart(new UploadMultipartPartRequest()
.withAccountId(accountId)
.withChecksum(checksum)
.withBody(inputSubStream)
.withRange("bytes " + currentPosition + "-" + (currentPosition + length - 1) + "/*")
.withUploadId(uploadId)
.withVaultName(vaultName));
} finally {
try {inputSubStream.close();} catch (Exception e) {}
}
currentPosition += partSize;
}
String checksum = TreeHashGenerator.calculateTreeHash(binaryChecksums);
String archiveSize = Long.toString(file.length());
CompleteMultipartUploadResult completeMultipartUploadResult =
glacier.completeMultipartUpload(new CompleteMultipartUploadRequest()
.withAccountId(accountId)
.withArchiveSize(archiveSize)
.withVaultName(vaultName)
.withChecksum(checksum)
.withUploadId(uploadId));
String artifactId = completeMultipartUploadResult.getArchiveId();
return new UploadResult(artifactId);
} catch (Exception e) {
glacier.abortMultipartUpload(new AbortMultipartUploadRequest(accountId, vaultName, uploadId));
throw new AmazonClientException("Unable to finish the upload", e);
}
>>>>>>> ef31f4906e32c7ce076d8c5765921b66050b09b9
}
|