में लापता सीमा मैं XMLHttprequest के साथ एक फ़ाइल अपलोड कर रहा हूं।XMLHttprequest के साथ एक फ़ाइल अपलोड करना - मल्टीपार्ट/फॉर्म-डेटा
var upload = function(file) {
// Create form data
var formData = new FormData();
formData.append('file', file);
var xhr = new XMLHttpRequest();
// Open
xhr.open('POST', this.options.action);
// Set headers
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("X-File-Name", file.fileName);
xhr.setRequestHeader("X-File-Size", file.fileSize);
xhr.setRequestHeader("X-File-Type", file.type);
// Send
xhr.send(formData);
}
सर्वर साइड पर इस तरह से, upload.php में मैं फ़ाइल को पढ़ने:
file_put_contents($filename, (file_get_contents('php://input')));
सब कुछ ठीक काम करता है, सिवाय इसके कि यहाँ जे एस समारोह है, कि एक फ़ाइल अपलोड करता है मुझे एक PHP चेतावनी मिलती है:
Missing boundary in multipart/form-data POST data in Unknown on line 0
।
यदि मैं इस पंक्ति को हटा देता हूं: xhr.setRequestHeader("Content-Type", "multipart/form-data");
चेतावनी दूर हो जाती है।
यहां समस्या क्या होनी चाहिए?
सामग्री प्रकार के रूप में 'एप्लिकेशन/एक्स-www-form-urlencoded' का उपयोग करने का प्रयास करें। या इसे छोड़ दें, क्योंकि यह एक AJAX अनुरोध द्वारा भेजा गया डिफ़ॉल्ट सामग्री-प्रकार है। –
यह काम कर सकता है, लेकिन बड़ी फ़ाइलों (यहां तक कि 5-600 केबी) के लिए ब्राउज़र फ्रीज हो जाएगा क्योंकि इसे फ़ाइल को "टेक्स्ट" प्रारूप में भेजना होगा। मुझे 'मल्टीपार्ट/फॉर्म डेटा' का उपयोग करना होगा। –
क्षमा करें, फ़ाइल-अपलोड बिट को अनदेखा करें (पता नहीं कैसे), लेकिन [मुझे लगता है कि यह आपके queston का जवाब दे सकता है] (http://stackoverflow.com/questions/5933949/how-to-send-multipart-form- डेटा-फॉर्म-कंटेंट-बाय-एजेक्स-नो-जेक्वायरी), अधिक विशेष रूप से: 'xhr.setRequestHeader ("सामग्री-प्रकार", "मल्टीपार्ट/फॉर्म-डेटा; charset = utf-8; सीमा =" + Math.random () .toString()। substr (2)); 'चाल –