我有一个 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 对象实例化客户端来调整客户端使用的重试次数。
关于java - amazon s3上传文件超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774909/