सफारी 5 / फ़ायरफ़ॉक्स 4 के साथ शुरू करना, इसका उपयोग करना सबसे आसान है FormData कक्षा :
var data = new FormData();
jQuery.each(jQuery('#file')[0].files, function(i, file) {
data.append('file-'+i, file);
});
तो अब आपके पास ए FormData ऑब्जेक्ट है, जो XMLHttpRequest के साथ भेजने के लिए तैयार है।
jQuery.ajax({
url: 'php/upload.php',
data: data,
cache: false,
contentType: false,
processData: false,
method: 'POST',
type: 'POST', // For jQuery < 1.9
success: function(data){
alert(data);
}
});
यह अनिवार्य है कि आप jQuery को नहीं जोड़ने के लिए मजबूर contentTypeकरने के लिए विकल्प सेट करेंfalseContent-Type हेडर , अन्यथा, सीमा स्ट्रिंग इसके साथ गायब हो जाएगी। इसके अलावा, आपको processDataध्वज सेट को झूठे पर छोड़ना होगा , अन्यथा, jQuery आपके FormDataस्ट्रिंग में बदलने की कोशिश करेगा , जो विफल हो जाएगा।
अब आप PHP का उपयोग करके फ़ाइल को पुनः प्राप्त कर सकते हैं:
$_FILES['file-0']
(केवल एक फ़ाइल है, file-0 जब तक आप multipleअपने फ़ाइल इनपुट पर विशेषता निर्दिष्ट नहीं करते हैं , उस स्थिति में, संख्या आपकी फ़ाइल के साथ बढ़ेगी।)
पुराने ब्राउज़रों के लिए फ़ॉर्मडाटा एमुलेशन का उपयोग करना
var opts = {
url: 'php/upload.php',
data: data,
cache: false,
contentType: false,
processData: false,
method: 'POST',
type: 'POST', // For jQuery < 1.9
success: function(data){
alert(data);
}
};
if(data.fake) {
// Make sure no text encoding stuff is done by xhr
opts.xhr = function() { var xhr = jQuery.ajaxSettings.xhr(); xhr.send = xhr.sendAsBinary; return xhr; }
opts.contentType = "multipart/form-data; boundary="+data.boundary;
opts.data = data.toString();
}
jQuery.ajax(opts);
एक मौजूदा फ़ॉर्म से फ़ॉर्मडाटा बनाएँ
फ़ाइलों को मैन्युअल रूप से पुनरावृत्त करने के बजाय, फॉर्मडाटा ऑब्जेक्ट को मौजूदा फॉर्म ऑब्जेक्ट की सामग्री के साथ भी बनाया जा सकता है:
var data = new FormData(jQuery('form')[0]);
एक काउंटर के बजाय एक PHP देशी सरणी का उपयोग करें
बस अपनी फ़ाइल तत्वों को समान नाम दें और कोष्ठक में नाम समाप्त करें:
jQuery.each(jQuery('#file')[0].files, function(i, file) {
data.append('file[]', file);
});
$_FILES['file']फिर एक सरणी होगी जिसमें अपलोड की गई प्रत्येक फ़ाइल के लिए फ़ाइल अपलोड फ़ील्ड होगी। मैं वास्तव में इसे अपने प्रारंभिक समाधान पर सुझाता हूं क्योंकि यह अधिक से अधिक पुनरावृति करना आसान है।