2011-01-07 8 views
12

मैं फ़ाइलों का बैच अपलोड करने के लिए वैलम्स अजाक्स अपलोडर का उपयोग कर रहा हूं। हमने हाल ही में कोड को एक-अपलोड से बहु-अपलोड प्रकार से बदल दिया है। इसने हमारे कोड के साथ एक समस्या उठाई है।वैल्यूज अजाक्स अपलोडर (Mutli) - पता लगाएं कि सभी फाइलें कब अपलोड की जाती हैं

जैसा कि आप देख सकते हैं, जब onComplete ईवेंट आग, हम नई अपलोड की गई छवियों को दिखाने के लिए पृष्ठ को पुनः लोड करते हैं। हालांकि, onComplete ईवेंट प्रत्येक फ़ाइल पूर्ण होने के बाद फायरिंग प्रतीत होता है, और पूरे बैच के बाद नहीं। यह अब एक समस्या का कारण बनता है क्योंकि जब पहली फ़ाइल समाप्त होती है, तो पेज रीलोड प्रयास निकाल दिया जाता है और अपलोडर एक चेतावनी पॉप अप करता है "अगर आप यह पृष्ठ छोड़ देते हैं, तो सभी हेक आपके शेष अपलोड पर ढीले हो जाएंगे" - या उस प्रभाव के लिए कुछ।

मुझे लगता है कि onComplete ईवेंट पूर्ण फ़ाइल की 0-आधारित आईडी भेजता है, लेकिन मुझे यकीन नहीं है कि बैच कब किया जाता है यह निर्धारित करने के लिए इसका उपयोग कैसे किया जाए।

मुझे लगता है कि मेरा प्रश्न है ए) क्या कोई अलग घटना है जो सभी फ़ाइलों को पूरा होने पर ट्रिगर करती है या बी) onComplete ईवेंट में ट्रैक रखने के लिए, मैं कैसे निर्धारित कर सकता हूं कि कितनी फाइलें हैं पूरा कर लिया है?

var uploader = new qq.FileUploader({ 
     multiple: true, 
     element: document.getElementById('file-uploader'), 
     action: '/projectPhotoUpload.php', 
     allowedExtensions: ['jpg', 'png', 'gif'], 
     debug: true, 
     params: {id: i}, 
     onComplete: function(id, fileName, responseJSON){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject;         
     } 
    }) 

उत्तर

22

आप एक काउंटर जोड़ सकते हैं जो अपलोड शुरू होने पर बढ़ता है और पूर्ण होने पर कमी करता है। केवल पूरा पर अनुप्रेषित जब काउंटर 0.

var running = 0; 
var uploader = new qq.FileUploader({ 
    multiple: true, 
    element: document.getElementById('file-uploader'), 
    action: '/projectPhotoUpload.php', 
    allowedExtensions: ['jpg', 'png', 'gif'], 
    debug: true, 
    params: {id: i}, 
    onSubmit: function(id, fileName){ 
     running++;         
    }, 
    onComplete: function(id, fileName, responseJSON){ 
     running--; 
     if(running==0){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject;         
     } 
    } 
}) 
+2

परफेक्ट! ठीक वही जो मेरे द्वारा खोजा जा रहा था। – Dutchie432

+0

शानदार समाधान !!!! उचित कार्यान्वयन प्रयास के लिए – Sadikhasan

4

अच्छा जवाब है, ब्याज से बाहर अगर आप responseJSON देखने के लिए जाँच करने के लिए यदि फ़ाइलें सर्वर स्क्रिप्ट पर अपलोड किया था, अपने सेट चाहता था

return array('success'=>true, 'filename'=>$filename . '.' . $ext); 

तो फिर तुम इसे जे एस में

var success = responseJSON["success"] 
var filename = responseJSON["filename"] 

की तरह इस तरह से आप फ़ाइलों की एक सूची बना सकते हैं लेने और पूरा होने पर नाम की जांच कर सकते हैं, या केवल

०१२३५१६४१०६१ घटती
if (success == true) 

अगर अपलोड असफल रहे थे, तो आप यह उदाहरण के लिए घटती करना चाह सकते हैं

+0

+1। – Herr

1

आप उपयोगकर्ता एक फ़ाइल अपलोड से बाहर रद्द मामले में एक घटना को रद्द जोड़ने की आवश्यकता होगी:

onCancel: function(id, fileName){running--;} 

मैं अपने कार्यान्वयन पर यहां लेने के लिए सही दृष्टिकोण पर बहस कर रहा हूं। फाइल अपलोड होने के बाद भी पेज रीडायरेक्ट करना चाहूंगा, लेकिन यदि उपयोगकर्ता अधिक फाइलें अपलोड करना चाहता है तो क्या होगा; फ़ाइलों को अलग निर्देशिका में फैलाया जा सकता है।

ऐसा लगता है कि "मैं कर चुका हूं" बटन रखने का सबसे अच्छा तरीका है जो उपयोगकर्ता अपलोड होने के बाद रीडायरेक्ट करेगा।

-1

सभी अपलोड की गई फाइलों का इलाज करने के लिए आंतरिक संपत्ति _filesInProgress का उपयोग करने का एक आसान तरीका होगा। यह देगा:

var uploader = new qq.FileUploader({ 
    multiple: true, 
    element: document.getElementById('file-uploader'), 
    action: '/projectPhotoUpload.php', 
    allowedExtensions: ['jpg', 'png', 'gif'], 
    debug: true, 
    params: {id: i}, 
    onComplete: function(id, fileName, responseJSON){ 
     if(uploader._filesInProgress == 0){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject; 
     }         
    } 
}); 
+0

"निजी" गुणों पर निर्भर रहने के लिए कभी भी अच्छा विचार नहीं है –

+0

@RayNicholus क्यों? – Munto

+0

... क्योंकि वे प्रकाशित एपीआई का हिस्सा नहीं हैं, और किसी भी समय बदल सकते हैं।आंतरिक निजी संपत्तियों में परिवर्तन तोड़ना अक्सर हो सकता है और इसे अनियंत्रित किया जाएगा। –

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