Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

amazon s3 upload file time out

Tags:

java

amazon-s3

I have a JPG file with 800KB. I try to upload to S3 and keep getting timeout error. Can you please figure what is wrong? 800KB is rather small for upload.

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));
like image 633
user1688346 Avatar asked Oct 08 '12 03:10

user1688346


2 Answers

If your endpoint is behind a VPC it will also silently error out. You can add a new VPC endpoint here for s3

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

like image 54
Gabriel Doty Avatar answered Oct 06 '22 22:10

Gabriel Doty


Is it possible that IOUtils.toByteArray is draining your input stream so that there is no more data to be read from it when the service call is made? In that case a stream.reset() would fix the issue.

But if you're just uploading a file (as opposed to an arbitrary InputStream), you can use the simpler form of AmazonS3.putObject() that takes a File, and then you won't need to compute the content length at all.

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

This will automatically retry any such network errors several times. You can tweak how many retries the client uses by instantiating it with a ClientConfiguration object.

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

like image 42
Zach Musgrave Avatar answered Oct 06 '22 22:10

Zach Musgrave