【问题标题】:Amazon S3 Client setReadLimitAmazon S3 客户端 setReadLimit
【发布时间】:2014-11-11 10:55:52
【问题描述】:

在将文件上传到 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

根据适用于 Java 的 AWS 开发工具包 1.8.10 我们可以通过以下方式设置每个请求配置的最大流缓冲区大小 request.getRequestClientOptions().setReadLimit(int)

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    有点坏死,但您需要创建一个 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)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2010-11-16
        • 2010-11-16
        • 2021-01-02
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多