-2

java SDKを使用してlow-level apiを使用してAmazon S3に約5 MbサイズのCSVファイルをアップロードしようとしています。Amazon S3バケット大ファイルアップロード

以下のエラーが発生しています。

com.amazonaws.services.s3.model.AmazonS3Exception: The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchUpload; Request ID:)

あなたは何が間違っていたかをお教えください。私はus-west-1地域を使用しています。あなたのアップロードの

List<PartETag> partETags = new ArrayList<PartETag>(); 
    InitiateMultipartUploadRequest initRequest = new 
    InitiateMultipartUploadRequest(tempVariableBucketName, tempVariableAccessKey); 
    InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest); 

    long contentLength = is.available(); 
    long partSize = 1 * 1024 * 1024; // Set part size to 1 MB. 

    try { 
     long filePosition = 0; 
     for (int i = 1; filePosition < contentLength; i++) { 
      partSize = Math.min(partSize, (contentLength - filePosition)); 
      logger.info("Upload Id " + initResponse.getUploadId()); 
      UploadPartRequest uploadRequest = new UploadPartRequest() 
       .withBucketName(tempVariableBucketName).withKey(fileName) 
       .withUploadId(initResponse.getUploadId()).withPartNumber(i) 
       .withFileOffset(filePosition) 
       .withInputStream(is) 
       .withPartSize(partSize); 

      partETags.add(s3Client.uploadPart(uploadRequest).getPartETag()); 
      filePosition += partSize; 
     } 
     CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(tempVariableBucketName,tempVariableAccessKey,initResponse.getUploadId(),partETags); 
     s3Client.completeMultipartUpload(compRequest); 
    } catch (Exception e) { 
     logger.error(e.getMessage()); 
     s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(tempVariableBucketName, tempVariableAccessKey, initResponse.getUploadId())); 
     throw e; 
    } 
+0

コードを入力してください。 – Asdfg

+0

私はコードを投稿しました。 –

答えて

0
Pleas make sure our AWS S3 configuration : 
    <CORSConfiguration> 
     <CORSRule> 
      <AllowedOrigin>*</AllowedOrigin> 
      <AllowedMethod>GET</AllowedMethod> 
      <MaxAgeSeconds>3000</MaxAgeSeconds> 
      <AllowedHeader>Authorization</AllowedHeader> 
     </CORSRule> 
    </CORSConfiguration> 
+0

Amanに感謝しますが、この設定はすでにCORS設定のPermissionsタブにあります。それでも、それは動作しません。 –

0

一つが失敗しています。 s3Client.uploadPart()からエラーをキャッチして、再試行する必要があります。

以下の簡単なコードでは、以下の改善が推奨されています。

1)再試行ごとに増加するタイムアウトを追加します。

2)エラーのタイプを処理して、再試行が有効かどうかを判断します。いくつかのエラーについては、エラーを報告して中止するだけです。

3)永遠にwhileループを防ぐため、再試行回数を10回に制限します。

このスタックオーバーフローの質問には、例のエラー処理を改善するためのコードがあります。

Problems when uploading large files to Amazon S3

+0

私はあなたが言及したリンクを先に行っていました。しかし、成功することはできませんでした。毎回同じエラーが発生しています**指定されたアップロードは存在しません。アップロードIDが無効であるか、アップロードが中止または完了している可能性があります。** アップロードIDに関連していくつか変更する必要がありますか? –

+0

私はコードを掲載しました。それを確認してください。再試行をブロックして追加しましたが、一度は試してみました。再試行の度に、同じエラーメッセージが表示されました**アップロードIDが無効です** –

+0

再試行コードを統合して質問を更新してください。また、エラーが発生したときにprintステートメントを追加して、各アップロードパートでどのようなエラーが発生しているかを確認します。 –

0

私はAWSのGeneratePresignedUrlRequest機能を使用してこの問題を解決することができました。 しかし、今では新しいエラーが発生しています。 413要求エンティティが大きすぎるnginx。私は、私がサーバのnginx.confファイルを変更する必要があることが分かったところで、解決策を探った。 ここで私はサーバ/ロードバランサの複数のインスタンスを持つことになるので、すべてのインスタンスに対して手動で設定する必要があるのでしょうか?

関連する問題