in src/main/java/com/aliyun/oss/internal/OSSDownloadOperation.java [606:681]
public PartResult call() throws Exception {
PartResult tr = null;
RandomAccessFile output = null;
InputStream content = null;
try {
DownloadPart downloadPart = downloadCheckPoint.downloadParts.get(partIndex);
tr = new PartResult(partIndex + 1, downloadPart.start, downloadPart.end);
output = new RandomAccessFile(downloadFileRequest.getTempDownloadFile(), "rw");
output.seek(downloadPart.fileStart);
GetObjectRequest getObjectRequest = new GetObjectRequest(downloadFileRequest.getBucketName(),
downloadFileRequest.getKey());
getObjectRequest.setMatchingETagConstraints(downloadFileRequest.getMatchingETagConstraints());
getObjectRequest.setNonmatchingETagConstraints(downloadFileRequest.getNonmatchingETagConstraints());
getObjectRequest.setModifiedSinceConstraint(downloadFileRequest.getModifiedSinceConstraint());
getObjectRequest.setUnmodifiedSinceConstraint(downloadFileRequest.getUnmodifiedSinceConstraint());
getObjectRequest.setResponseHeaders(downloadFileRequest.getResponseHeaders());
getObjectRequest.setRange(downloadPart.start, downloadPart.end);
String versionId = downloadFileRequest.getVersionId();
if (versionId != null) {
getObjectRequest.setVersionId(versionId);
}
Payer payer = downloadFileRequest.getRequestPayer();
if (payer != null) {
getObjectRequest.setRequestPayer(payer);
}
int limit = downloadFileRequest.getTrafficLimit();
if (limit > 0) {
getObjectRequest.setTrafficLimit(limit);
}
OSSObject ossObj = getObjectWrap(getObjectRequest);
objectMetadata = ossObj.getObjectMetadata();
content = ossObj.getObjectContent();
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int bytesRead = 0;
while ((bytesRead = IOUtils.readNBytes(content, buffer, 0, buffer.length)) > 0) {
output.write(buffer, 0, bytesRead);
}
if (objectOperation.getInnerClient().getClientConfiguration().isCrcCheckEnabled()) {
Long clientCRC = getInputStreamCRCWrap(content);
tr.setClientCRC(clientCRC);
tr.setServerCRC(objectMetadata.getServerCRC());
tr.setLength(objectMetadata.getContentLength());
downloadPart.length = objectMetadata.getContentLength();
downloadPart.crc = clientCRC;
}
downloadCheckPoint.update(partIndex, true);
if (downloadFileRequest.isEnableCheckpoint()) {
downloadCheckPoint.dump(downloadFileRequest.getCheckpointFile());
}
ProgressPublisher.publishResponseBytesTransferred(progressListener,
(downloadPart.end - downloadPart.start + 1));
} catch (Exception e) {
tr.setFailed(true);
tr.setException(e);
logException(String.format("Task %d:%s upload part %d failed: ", id, name, partIndex), e);
} finally {
if (output != null) {
output.close();
}
if (content != null) {
content.close();
}
}
return tr;
}