我有下一个将文件上传到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,但它没有帮助。
有没有办法解决它?
答案 0 :(得分:0)
日志消息告诉您发送数据到S3时出现暂时性错误。您已配置this.$element[dimension](this.$element[dimension]())[0].offsetHeight
,因此AmazonS3Client透明地重试失败的请求并且整体上传成功。
此处无需修改任何内容 - 有时数据包会在网络上丢失,尤其是当您尝试同时推送大量数据包时。等待一段时间并重试通常是解决这个问题的正确方法,而这正是已经发生的事情。
如果您愿意,可以尝试调低.offsetHeight
设置,以限制一次上传文件的数量 - 这可能是您还在哪里的最佳位置获得合理的吞吐量,但不会使网络过载。