3

将文件上传到 S3 时,我们在一个案例中收到此随机错误消息

“如果请求涉及输入流,则可以通过 request.getRequestClientOptions().setReadLimit(int) 配置最大流缓冲区大小”

来源是:https ://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/AmazonS3Client.java

根据 AWS SDK for Java 1.8.10 我们可以通过 request.getRequestClientOptions().setReadLimit(int) 设置每个请求配置的最大流缓冲区大小

我们正在使用 com.amazonaws.services.s3.AmazonS3 对象上传数据。

谁能建议我们如何通过 com.amazonaws.services.s3.AmazonS3 设置 ReadLimit()

https://aws.amazon.com/releasenotes/0167195602185387

4

2 回答 2

2

有点坏死,但您需要创建一个 PutObjectRequest 并在其上使用 setReadLimit:

PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, fileInputStream, objectMetadata);
putObjectRequest.getRequestClientOptions().setReadLimit(xxx);

s3Client.putObject(putObjectRequest);

如果您查看 的实现putObjectRequest(String, String, InputStream, ObjectMetadata),您会发现它只是创建了一个 PutObjectRequest 并将其传递给putObject(PutObjectRequest)

于 2015-02-16T10:45:38.600 回答
2

听起来您正在从 InputStream 上传数据,但某种暂时性错误正在中断上传。SDK 无法重试请求,因为默认情况下 InputStreams 是可标记/可重置的。该错误消息试图提供有关缓冲区大小的指导,但对于大数据,您可能不希望将其全部加载到内存中。

如果您能够从文件源上传,那么您应该不会再看到此错误。因为文件是可重置的,所以如果 SDK 在第一次尝试时遇到错误,它可以重试您的请求。

于 2015-06-25T17:12:06.910 回答