2016-03-25 7 views
14

Railsアプリケーション内のAWSにアップロードされたファイルのうち、ZIP形式のファイルが破損したり変換されたりするという状況が続いています。ダウンロードして圧縮解除すると、CPGZ形式に変換され、ZIP形式に復元され、無限に圧縮されます。RailsがAWSにアップロードされ、.zip.cpgzファイルループが作成される

私はこれを引き起こすパターンに気づいていないので、見かけ上散発的で、アップロード前にファイルが破損していないことを確認できます。これ以外の唯一のissue/topicは、PHPに関連しており、さまざまな状況のようです。

私はAWS SDK for Ruby v1(私のRailsバージョンのためv2ではありません)とjQuery-File-Uploadを使用しています。ファイルの一部が大きいので、チャンクアップロードを使用しています。

私のコントローラでは、presigned POSTのURLは次のように作成されます

S3_BUCKET.presigned_post(key: "uploads/#{SecureRandom.uuid}-${filename}", success_action_status: '201') 

とjQueryファイルのアップロードは、(いくつかの部分は簡潔にするため削除)ので、同じように設定されています

this.$el.fileupload({ 
    fileInput: this.uploadField, // this is an <input type="file"> 
    url: this.awsURL, // https://BUCKET.s3.amazonaws.com/ 
    formData: JSON.parse(this.awsData), // {"AWSAccessKeyId":"...","key":"uploads/1234-${filename}","policy":"...","signature":"...","success_action_status":"201"} 
    type: 'POST', 
    autoUpload: true, 
    paramName: 'file', 
    dataType: 'XML', 
    replaceFileInput: false, 
    maxChunkSize: 1000000, 
    add: function(event, data) { 
    var file = data.files[0]; 
    var fileType = file.type; 

    // Check file type 
    if (~'ai sketch psd jpg jpeg png zip ttf woff eot gif'.indexOf(fileType.toLowerCase())) { 
     return alert('Sorry, that file type is not supported'); 
    }; 

    data.submit(); 
    }, 
    progress: function(event, data) { 
    // Display progress 
    }, 
    done: function(event, data) { 
    var file = data.files[0]; 
    var fileName = file.name.replace(/ /g,"_"); 
    var item = _this.uploadedItems[fileName]; 
    var key = $(data.jqXHR.responseXML).find("Key").text(); 
    // awsHost = BUCKET.s3.amazonaws.com 
    var url = '//' + _this.awsHost + '/' + key; 

    // Set form values using above info 
    }, 
    fail: function(event, data) { 
    // Alert failure 
    } 
}); 

は誰を持っていますこれを経験した?非常にイライラしています。

+0

を参照してくださいあなたは、あなたのローカルディスク上の一時フォルダに「アップロード」を試したことがありますか?もしそうなら、同じ破損が起きますか? –

+0

@AnthonyEローカルでアップロードをテストするにはどうすればよいですか? –

答えて

2

セットコンテンツタイプへの応用/ジップあなたは、要求を送信するとき。

https://github.com/aws/aws-sdk-ruby/blob/aws-sdk-v1/lib/aws/s3/presigned_post.rb

+0

提案していただきありがとうございます! POST URLを 'S3_BUCKET.presigned_post(key:" uploads /#{SecureRandom.uuid} - $ {filename} "、content_type: 'application/zip'、success_action_status: '201')に変更しました。アップロード時にCPGZファイル。 –

+0

チャンクではない場合は機能しますか?あなたは同じ問題に直面していますか?データ破損の原因となっているものをいつから分離しようとしていますか? – Shishir

+0

あなたの提案はここに修正されてしまった!私はチャンクが正しく設定されていませんでした。公式の回答を自由に作成してください。私はそれを受け入れます。 –

関連する問題