java - amazon s3上传文件超时

标签 java amazon-s3

我有一个 800KB 的 JPG 文件。我尝试上传到 S3 并不断收到超时错误。 你能弄清楚哪里出了问题吗? 800KB 对于上传来说很小。

Error Message: Your socket connection to the server was not read from or written to within the timeout period. Idle connections will be closed.

HTTP Status Code: 400

AWS Error Code: RequestTimeout

Long contentLength = null;
System.out.println("Uploading a new object to S3 from a file\n");
try {
    byte[] contentBytes = IOUtils.toByteArray(is);
    contentLength = Long.valueOf(contentBytes.length);
} catch (IOException e) {
    System.err.printf("Failed while reading bytes from %s", e.getMessage());
}

ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(contentLength);        
       
s3.putObject(new PutObjectRequest(bucketName, key, is, metadata));

最佳答案

IOUtils.toByteArray 是否有可能耗尽您的输入流,以便在进行服务调用时没有更多数据可从中读取?在这种情况下,stream.reset() 可以解决问题。

但如果您只是上传一个文件(而不是任意的 InputStream),您可以使用更简单的 AmazonS3.putObject() 形式,它接受一个文件,然后您就不需要计算内容长度完全没有。

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#putObject(java.lang.String , java.lang.String, java.io.File)

这将自动多次重试任何此类网络错误。您可以通过使用 ClientConfiguration 对象实例化客户端来调整客户端使用的重试次数。

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry(int)

关于java - amazon s3上传文件超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774909/

相关文章:

java - 需要帮助在 Java 中将数组转换为另一个数组

amazon-web-services - S3静态网站存储桶不可用

python - 如何在不写入磁盘的情况下将 AWS S3 上的文本文件导入 pandas

php - 用于 PHP 托管的 AWS CloudFront

amazon-web-services - 为什么在无服务器框架中导出 s3 存储桶名称和 arn 使用不同的语法?

java - 在 3D Young Tableau 上调用 Maxify?

java - Android-Magento-如何使用XML-RPC在Android中获取多个产品的详细信息

java - 在多模块 Maven 项目中共享集成测试

java - AWS TransferManager uploadFileList 在 S3 中截断文件名

java - 如何使用java流在每次迭代中使用当前和下一个对象对列表进行分区?