amazon s3上传文件超时

我有一个800KB的JPG文件。 我尝试上传到S3并继续获得超时错误。 你能想出什么问题吗? 800KB对于上传而言相当小。

错误消息:未在超时期限内读取或写入与服务器的套接字连接。 空闲连接将被关闭。

HTTP状态代码:400

AWS错误代码: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()forms获取文件,然后您根本不需要计算内容长度。

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)

如果您的端点位于VPC后面,它也会默默地出错。 您可以在此处为s3添加新的VPC端点

https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/