2012-10-20 32 views
24
var fd = new FormData(); 
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]); 
var xhr = new XMLHttpRequest(); 
xhr.open("POST", "uph.php"); 
xhr.send(fd); 

uph.php:अपलोड कर रहा है कई formData का उपयोग करके फ़ाइलें()

var_dump($_FILES['fileToUpload']); 

यह काम करता है, लेकिन स्पष्ट रूप से केवल files[0] के लिए। यह चुने गए फ़ाइल के लिए कैसे काम करें?

मैं [0] को दूर करने की कोशिश की, लेकिन यह काम नहीं किया।

उत्तर

11

तुम बस fileToUpload[] बजाय fileToUpload उपयोग करने के लिए:

fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[0]); 

और यह कई नाम, आकार, आदि के साथ एक सरणी वापस आ जाएगी ...

42

आप संलग्न करने के लिए फ़ाइलों लंबाई प्राप्त करने के लिए जे एस में और उसके बाद

//JavaScript 
var ins = document.getElementById('fileToUpload').files.length; 
for (var x = 0; x < ins; x++) { 
    fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[x]); 
} 

//PHP 
$count = count($_FILES['fileToUpload']['name']); 
for ($i = 0; $i < $count; $i++) { 
    echo 'Name: '.$_FILES['fileToUpload']['name'][$i].'<br/>'; 
} 
+2

क्यों filetoupload []? – Phoenix

+0

मेरे लिए काम नहीं किया। मुझे लगता है कि यह इस बात पर निर्भर करता है कि आपका मल्टीपार्ट फॉर्म सर्वर के किनारे कैसे संभालेगा। – fubbe

+7

[MDN के अनुसार 'नियमित रूप डेटा के साथ के रूप में, आप एक से अधिक मान ही नाम के साथ जोड़ सकते हैं। उदाहरण के लिए (और नाम पर [] जोड़कर PHP के नामकरण सम्मेलनों के साथ संगत होना): '। देखें उदाहरण 3] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/append) @Phoenix – 0xcaff

21

नीचे के रूप में जिस तरह से जावास्क्रिप्ट साथ जाने के लिए AJAX अनुरोध के माध्यम से भेज:

var data = new FormData(); 

$.each($("input[type='file']")[0].files, function(i, file) { 
    data.append('file', file); 
}); 

$.ajax({ 
    type: 'POST', 
    url: '/your/url', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data : data, 
    success: function(result){ 
     console.log(result); 
    }, 
    error: function(err){ 
     console.log(err); 
    } 
}) 

आप data.append ('फ़ाइल', फ़ाइल) को कई बार फोन तो आपके अनुरोध आपकी फ़ाइलों की एक सरणी शामिल होंगे।

मैं स्वयं इस प्रकार Node.js और बहुखण्डीय हैंडलर मिडलवेयर multer डेटा प्राप्त का उपयोग कर:

router.post('/trip/save', upload.array('file', 10), function(req, res){ 
    // Your array of files is in req.files 
} 
+1

'... आप data.append ('फ़ाइल', फ़ाइल) कहते हैं यदि एक से अधिक बार आपके अनुरोध आपकी फ़ाइलों की एक सरणी में शामिल होंगे ... 'मुझे निराशा के घंटे सहेजा गया, विशेष रूप से, क्योंकि मुझे लगा कि नाम होना चाहिए' फाइल [] ', लेकिन सिर्फ' file' का उपयोग कर और कई बार फोन करने के लिए काम किया, धन्यवाद! – bourgeois247

+1

Dude आप एक पौराणिक कथा सुबह धन्यवाद से इस के लिए खोज की है आवंटित आदमी – Kannan

+1

मैं तुम्हें उदाहरण की कोशिश की है, लेकिन जब मैं यह var_dumped, यह हमेशा सेट के अंतिम छवि वापस आ। मैंने बदल दिया: 'data.append ('file', file) 'to data.append (' file ', i)', जो मेरे लिए काम करता है। –