Chức năng javascript của tôi chỉ tải lên tệp văn bản chính xác. Ai có thể giúp tôi tìm ra cách để làm cho nó cũng chấp nhận hình ảnh vv?Javascript không tải lên dữ liệu nhị phân
function fileUpload(files) {
if (!files.length) {
fileList.innerHTML = "<p>No files selected!</p>";
} else {
var list = document.createElement("ul");
for (var i = 0; i < files.length; i++) {
//Set vars
var file = files[i],
fileName = file.name,
fileSize = file.size,
fileData = file.getAsBinary(),
boundary = "xxxxxxxxx",
uri = "receive.php",
//Create file info HTML output
li = document.createElement("li");
list.appendChild(li);
var info = document.createElement("span");
info.innerHTML = file.name + ": " + file.size + " bytes";
li.appendChild(info);
//Start sending file
var xhr = new XMLHttpRequest();
xhr.open("POST", uri, true);
xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary); // simulate a file MIME POST request.
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status <= 200) || xhr.status == 304) {
if (xhr.responseText != "") {
alert(xhr.responseText); // display response.
}
}
}
}
var body = "--" + boundary + "\r\n";
body += "Content-Disposition: form-data; name='upload'; filename='" + fileName + "'\r\n";
body += "Content-Type: application/octet-stream\r\n\r\n";
body += fileData + "\r\n";
body += "--" + boundary + "--";
xhr.send(body);
}
fileList.appendChild(list);
return true;
}
}
Cập nhật: Tôi không thể tìm ra cách áp dụng nó vào chức năng hiện tại của mình. Là xhr.sendAsBinary điều duy nhất đã thay đổi?
// Upload image files
upload = function(file) {
// Firefox 3.6, Chrome 6, WebKit
if(window.FileReader) {
// Once the process of reading file
this.loadEnd = function() {
bin = reader.result;
xhr = new XMLHttpRequest();
xhr.open('POST', targetPHP+'?up=true', true);
var boundary = 'xxxxxxxxx';
var body = '--' + boundary + "\r\n";
body += "Content-Disposition: form-data; name='upload'; filename='" + file.name + "'\r\n";
body += "Content-Type: application/octet-stream\r\n\r\n";
body += bin + "\r\n";
body += '--' + boundary + '--';
xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' + boundary);
// Firefox 3.6 provides a feature sendAsBinary()
if(xhr.sendAsBinary != null) {
xhr.sendAsBinary(body);
*snip*
Làm thế nào để bạn lấy các tập tin. Tôi có nghĩa là tham số tập tin phải được cung cấp ở đâu đó. Làm thế nào để bạn làm điều đó? Tôi cần một chút giải thích về chủ đề này của tập tin tải lên thông qua ajax. Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào. – user1575229
@ user1698985 Tôi không chắc chắn ý của bạn là gì, bạn có nghĩa là truy xuất nó ở phía PHP không? Trong trường hợp đó, bạn có thể tìm thấy nó trong dữ liệu POST. – natli
truy xuất nó ở phía máy chủ là một cuộc thảo luận khác. Tôi chỉ muốn tìm cách tệp được chọn trên máy khách được nạp vào dữ liệu biểu mẫu và được gửi qua ajax. Trong Html5 nó rất dễ dàng. nhưng tôi không hiểu nó như thế nào trong các phiên bản trước của html. Tôi đã cố gắng để nhìn vào các plugin ajaxform nhưng khó hiểu nó như thế nào của nó là lấy dữ liệu tập tin và gửi qua ajax. Tôi muốn hiểu toàn bộ quy trình, Từ lựa chọn tệp để xử lý trong jquery và gửi nó đến máy chủ. – user1575229