Я пытаюсь загрузить свой входной поток как многочастную загрузку в S3 (для достижения механизма повторной попытки). Если во время загрузки или преобразования произошла какая-либо ошибка, мне нужно возобновить работу с этого момента. Когда я пытаюсь загрузить файл, он выдаст исключение типа Your socket connection to the server was not read from or written to within the timeout period. Idle connections will be closed.
public static void main(String[] args) throws IOException {
PartETag partETag = uploadObjectAsMultipart(s3Client, bucketName, initResponse.getUploadId(), stringBuilder, 1, fileName, file);
combineMultiPartUpload(s3Client, bucketName, fileName, initResponse.getUploadId(), new ArrayList<PartETag>(){{add(partETag);}});
}
public static PartETag uploadObjectAsMultipart(AmazonS3Client s3Client, String bucketName, String uploadId, StringBuilder stringBuilder, int partNumber, String fileName, File file) {
UploadPartRequest uploadRequest =
new UploadPartRequest()
.withBucketName(bucketName)
.withUploadId(uploadId)
.withKey(fileName)
.withPartNumber(partNumber)
.withInputStream(new ByteArrayInputStream(stringBuilder.toString().getBytes(StandardCharsets.UTF_8)))
.withPartSize(5 * 1024 * 1024);
return s3Client.uploadPart(uploadRequest).getPartETag();
}
public static void combineMultiPartUpload(AmazonS3Client s3Client, String bucketName, String fileName, String uploadId, List<PartETag> partETags) {
CompleteMultipartUploadRequest compRequest =
new CompleteMultipartUploadRequest(bucketName,
fileName,
uploadId,
partETags);
s3Client.completeMultipartUpload(compRequest);
}