user1688346
user1688346

Reputation: 1970

amazon s3 upload file time out

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));

Upvotes: 15

Views: 30401

Answers (2)

Gabriel Doty
Gabriel Doty

Reputation: 1786

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/

Upvotes: 1

Zach Musgrave
Zach Musgrave

Reputation: 1022

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)

Upvotes: 12

Related Questions