2016-03-25 4 views
14

जब मेरे रेल अनुप्रयोग के भीतर एडब्ल्यूएस पर अपलोड भ्रष्ट कर रहे हैं/परिवर्तित मैं एक अजीब स्थिति है जहाँ कुछ फ़ाइलों को, विशेष रूप से प्रारूप ज़िप में चल रहा हूँ पर अपलोड करें। जब डाउनलोड किया है और decompressed वे एक CPGZ प्रारूप है, जो एक ज़िप में वापस decompresses, और असीम करता है में बदल जाते हैं।रेल एडब्ल्यूएस बनाने .zip.cpgz फ़ाइल पाश

मैं एक पैटर्न है कि इस का कारण बनता है देखा नहीं है, तो यह प्रतीत होता है छिटपुट है, और इस बात की पुष्टि कर सकते हैं कि फ़ाइलों को अपलोड करने से पहले भ्रष्ट नहीं हैं। केवल अन्य issue/topic मैं इस पर मिल गया है पीएचपी से संबंधित है, और विभिन्न परिस्थितियों हो रहा है।

मैं AWS SDK for Ruby v1 (मेरे रेल संस्करण के कारण v2 नहीं) और jQuery-File-Upload का उपयोग कर रहा हूं। चूंकि कुछ फाइलें बड़ी हैं, इसलिए मैं खंडित अपलोड का उपयोग कर रहा हूं।

मेरी नियंत्रक में, presigned पोस्ट 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

@ एंथनी मैं स्थानीय रूप से अपलोड का परीक्षण कैसे करूं? –

उत्तर

2

सेट सामग्री प्रकारजब आप अनुरोध भेजने के लिए आवेदन/ज़िप

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

+0

सुझाव के लिए धन्यवाद! मैं 'S3_BUCKET.presigned_post करने के लिए अपने पद URL बदल (कुंजी:" अपलोड/# {SecureRandom.uuid} - $ {filename} ", content_type: 'आवेदन/ज़िप', success_action_status: '201')' लेकिन दुर्भाग्य से मैं अभी भी अपलोड पर सीपीजीजेड फ़ाइल। –

+0

यह काम करता है अगर तुम ठस नहीं कर रहे हैं? या आप एक ही मुद्दे का सामना करते हैं। डेटा भ्रष्टाचार के कारण क्या हो रहा है और कब अलग करने की कोशिश कर रहा है? – Shishir

+0

आपका सुझाव यहां ठीक हो गया है! मैंने ठीक से सेट अप नहीं किया था। आधिकारिक उत्तर बनाने के लिए स्वतंत्र महसूस करें और मैं इसे स्वीकार करूंगा। –

संबंधित मुद्दे