2012-10-08 60 views
12

私は800KBのJPGファイルを持っています。私はS3にアップロードしようとし、タイムアウトエラーが発生し続ける。 あなたは何が間違っているのか理解していただけますか?アップロードには800KBほど小さいです。amazon s3アップロードファイルのタイムアウト

エラーメッセージ:サーバーへのソケット接続が、タイムアウト期間内に読み書きされませんでした。アイドル状態の接続は閉じられます。

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

を新しいVPCエンドポイントを追加することができます。 –

+0

1KBのファイルをアップロードしてもこれはいつも得られます。 – user1688346

答えて

10

はそれから読み込むべきデータがなくなるようにIOUtils.toByteArrayがあなたの入力ストリームを排出していることは可能ですそれはサービスコールが行われたときですか?その場合、stream.reset()は問題を解決します。

ファイルをアップロードするだけの場合(任意のInputStreamではなく)、AmazonS3.putObject()のより簡単な形式を使用してFileを取得し、コンテンツを計算する必要はありません長さ

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

これは、自動的にそのようなネットワークエラーを数回再試行します。 ClientConfigurationオブジェクトでインスタンス化することで、クライアントが使用する再試行回数を調整できます。あなたのエンドポイントがVPCの背後にある場合

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