2017-01-16 12 views
5

फ़ायरबेस भंडारण में एकाधिक फ़ाइलों को अपलोड करने का कोई तरीका है। यह एकल फ़ाइल को एकल प्रयास में निम्नानुसार अपलोड कर सकता है।फ़ायरबेस में एकाधिक फ़ाइलों को कैसे अपलोड करें?

fileButton.addEventListener('change', function(e){ 
//Get file 
var file = e.target.files[0]; 

//Create storage reference 
var storageRef = firebase.storage().ref(DirectryPath+"/"+file.name); 

//Upload file 
var task = storageRef.put(file); 

//Update progress bar 
    task.on('state_changed', 
    function progress(snapshot){ 

     var percentage = snapshot.bytesTransferred/snapshot.totalBytes * 100; 
     uploader.value = percentage; 
    }, 
    function error(err){ 

    }, 
    function complete(){ 
     var downloadURL = task.snapshot.downloadURL; 

    } 
); 

}); 

फ़ायरबेस स्टोरेज में एकाधिक फ़ाइलों को कैसे अपलोड करें।

+1

जब आप एकाधिक फ़ाइलों का चयन करते हैं, तो मुझे लगता है कि 'e.target.files' में एक से अधिक प्रविष्टियां हैं? यदि ऐसा है, तो 'e.target.files.forEach (फ़ंक्शन (फ़ाइल) {/ * प्रत्येक फ़ाइल को अपलोड करने से पहले आपने जो किया था * /}); ' – ArneHugo

उत्तर

10

मुझे अपने उपरोक्त प्रश्न का समाधान मिला और मैं इसे यहां रखना पसंद करता हूं क्योंकि यह किसी के लिए उपयोगी हो सकता है।

//Listen for file selection 
fileButton.addEventListener('change', function(e){ 
    //Get files 
    for (var i = 0; i < e.target.files.length; i++) { 
     var imageFile = e.target.files[i]; 

     uploadImageAsPromise(imageFile); 
    } 
}); 

//Handle waiting to upload each file using promise 
function uploadImageAsPromise (imageFile) { 
    return new Promise(function (resolve, reject) { 
     var storageRef = firebase.storage().ref(fullDirectory+"/"+imageFile.name); 

     //Upload file 
     var task = storageRef.put(imageFile); 

     //Update progress bar 
     task.on('state_changed', 
      function progress(snapshot){ 
       var percentage = snapshot.bytesTransferred/snapshot.totalBytes * 100; 
       uploader.value = percentage; 
      }, 
      function error(err){ 

      }, 
      function complete(){ 
       var downloadURL = task.snapshot.downloadURL; 
      } 
     ); 
    }); 
} 
+1

यदि आपने कई समवर्ती अपलोड कार्य किए हैं, तो वे अपलोड किए जाएंगे अनुक्रमिक रूप से – user1040495

+0

@isuru क्या आप अपनी एचटीएमएल स्रोत फ़ाइल साझा कर सकते हैं? क्या आप छवियों का पूर्वावलोकन कर रहे हैं? –

+0

@ArunaRajput मैंने फ़ायरबेस स्टोरेज में एकाधिक छवियों को अपलोड करने के लिए उपर्युक्त विधि का उपयोग किया। असल में आप क्या हासिल करना चाहते हैं? – isuru

2

मेरा मानना ​​है कि वहाँ एक सरल समाधान:

// set it up 
firebase.storage().ref().constructor.prototype.putFiles = function(files) { 
    var ref = this; 
    return Promise.all(files.map(function(file) { 
    return ref.child(file.name).put(file); 
    })); 
} 

// use it! 
firebase.storage().ref().putFiles(files).then(function(metadatas) { 
    // Get an array of file metadata 
}).catch(function(error) { 
    // If any task fails, handle this 
}); 
0

Firebase भंडारण, वादा का उपयोग करता है, तो आप इसे प्राप्त करने के लिए वादे उपयोग कर सकते हैं।

यहाँ firebase ब्लॉग लेख है कि इस विषय को शामिल किया गया है: Keeping our Promises (and Callbacks)


Promise.all() एक "वादे की सरणी"

Promise.all(
    // Array of "Promises" 
    myItems.map(item => putStorageItem(item)) 
) 
.then((url) => { 
    console.log(`All success`) 
}) 
.catch((error) => { 
    console.log(`Some failed: `, error.message) 
}); 

अपलोड प्रत्येक फ़ाइल दें और एक वादा लौट

putStorageItem(item) { 
    // the return value will be a Promise 
    return firebase.storage().ref("YourPath").put("YourFile") 
    .then((snapshot) => { 
    console.log('One success:', item) 
    }).catch((error) => { 
    console.log('One failed:', item, error.message) 
    }); 
} 

YourPath और YourFilemyItems सरणी (इस प्रकार item ऑब्जेक्ट) के साथ ले जाया जा सकता है।

मैंने उन्हें केवल पठनीयता के लिए छोड़ दिया, लेकिन आपको अवधारणा मिल गई।

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