【发布时间】:2018-04-12 09:11:38
【问题描述】:
我正在尝试使用 low-level api 使用 java SDK 将大小约为 5 Mb 的 CSV 文件上传到 Amazon S3。
我收到下面提到的错误:。
com.amazonaws.services.s3.model.AmazonS3Exception:指定的 上传不存在。上传 ID 可能无效,或者上传 可能已中止或完成。 (服务:Amazon S3;状态代码: 404;错误代码:NoSuchUpload;请求 ID:)
能否请您提出问题所在。我正在使用us-west-1 区域。
List<PartETag> partETags = new ArrayList<PartETag>();
InitiateMultipartUploadRequest initRequest = new
InitiateMultipartUploadRequest(tempVariableBucketName, tempVariableAccessKey);
InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest);
long contentLength = is.available();
long partSize = 1 * 1024 * 1024; // Set part size to 1 MB.
try {
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++) {
partSize = Math.min(partSize, (contentLength - filePosition));
logger.info("Upload Id " + initResponse.getUploadId());
UploadPartRequest uploadRequest = new UploadPartRequest()
.withBucketName(tempVariableBucketName).withKey(fileName)
.withUploadId(initResponse.getUploadId()).withPartNumber(i)
.withFileOffset(filePosition)
.withInputStream(is)
.withPartSize(partSize);
partETags.add(s3Client.uploadPart(uploadRequest).getPartETag());
filePosition += partSize;
}
CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(tempVariableBucketName,tempVariableAccessKey,initResponse.getUploadId(),partETags);
s3Client.completeMultipartUpload(compRequest);
} catch (Exception e) {
logger.error(e.getMessage());
s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(tempVariableBucketName, tempVariableAccessKey, initResponse.getUploadId()));
throw e;
}
【问题讨论】:
-
能否提供代码?
-
我已经发布了代码。
标签: amazon-web-services spring-boot amazon-s3 amazon-elastic-beanstalk