Amazon S3上传NoHttpResponseException

时间:2015-06-24 10:09:25

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

我有下一个将文件上传到Amazon S3的代码:

AmazonS3Client client = new AmazonS3Client(credentials, 
            new ClientConfiguration().withMaxConnections(100)
                                  .withConnectionTimeout(120 * 1000)
                                  .withMaxErrorRetry(15));
TransferManager tm = new TransferManager(client);
TransferManagerConfiguration configuration = new TransferManagerConfiguration();
configuration.setMultipartUploadThreshold(MULTIPART_THRESHOLD);
tm.setConfiguration(configuration);

Upload upload = tm.upload(bucket, key, file);

try {
    upload.waitForCompletion();
} catch(InterruptedException ex) {
    logger.error(ex.getMessage());
} finally {
    tm.shutdownNow(false);
}

可行,但有些上传(1GB)会生成下一条日志消息:

 INFO AmazonHttpClient:Unable to execute HTTP request: bucket-name.s3.amazonaws.com failed to respond
 org.apache.http.NoHttpResponseException: bucket-name.s3.amazonaws.com failed to respond

我曾尝试在没有AmazonS3Client的情况下创建TransferManager,但它没有帮助。

有没有办法解决它?

1 个答案:

答案 0 :(得分:0)

日志消息告诉您发送数据到S3时出现暂时性错误。您已配置this.$element[dimension](this.$element[dimension]())[0].offsetHeight,因此AmazonS3Client透明地重试失败的请求并且整体上传成功。

此处无需修改任何内容 - 有时数据包会在网络上丢失,尤其是当您尝试同时推送大量数据包时。等待一段时间并重试通常是解决这个问题的正确方法,而这正是已经发生的事情。

如果您愿意,可以尝试调低.offsetHeight设置,以限制一次上传文件的数量 - 这可能是您还在哪里的最佳位置获得合理的吞吐量,但不会使网络过载。