Tôi đang tải lên tệp có XMLHttprequest. Dưới đây là chức năng JS, đó tải lên một tập tin:Tải lên tệp có XMLHttprequest - Thiếu đường viền trong nhiều phần/biểu mẫu-dữ liệu
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);
}
Về phía server, trong upload.php Tôi đọc các tập tin theo cách này:
file_put_contents($filename, (file_get_contents('php://input')));
Tất cả mọi thứ hoạt động tốt, ngoại trừ việc Tôi nhận được Cảnh báo PHP:
Missing boundary in multipart/form-data POST data in Unknown on line 0
.
Nếu tôi xóa dòng này: xhr.setRequestHeader("Content-Type", "multipart/form-data");
cảnh báo biến mất.
Điều gì sẽ là vấn đề ở đây?
Thử sử dụng 'application/x-www-form-urlencoded' làm loại nội dung. Hoặc bỏ nó ra, vì đây là kiểu nội dung mặc định được gửi bởi một yêu cầu ajax. –
Điều này có thể hoạt động, nhưng đối với các tệp lớn (thậm chí 5-600 KB), trình duyệt sẽ đóng băng vì nó phải gửi tệp theo định dạng "văn bản". Tôi phải sử dụng 'multipart/form data'. –
Rất tiếc, đã bỏ qua bit tải lên tệp (không biết cách thực hiện), nhưng [Tôi nghĩ điều này có thể trả lời câu hỏi của bạn] (http://stackoverflow.com/questions/5933949/how-to-send-multipart-form- data-form-content-by-ajax-no-jquery), cụ thể hơn: 'xhr.setRequestHeader (" kiểu nội dung "," multipart/form-data; charset = utf-8; boundary = "+ Math.random () .toString(). substr (2)); 'nên làm các trick –