使用 Ajax(XHR2)上传文件有两种方式。首先,我可以将文件内容读取为数组缓冲区或二进制字符串,然后使用 XHR 的
send
方法进行简单的流式传输。例如,如此处所示:function uploadFile(img, file) {
const reader = new FileReader();
const xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
const percentage = Math.round((e.loaded * 100) / e.total);
// Do something with percentage
}
});
xhr.upload.addEventListener("load", (e) => console.log('Do something more'));
xhr.open("POST", "some-url");
xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');
reader.onload = function(evt) {
xhr.send(evt.target.result);
};
reader.readAsBinaryString(file);
}
其次,我可以使用 FormData
对象以 下面示例中所示的方式 上传文件:
var formData = new FormData();
// HTML file input, chosen by user
formData.append("userfile", fileInputElement.files[0]);
var request = new XMLHttpRequest();
request.open("POST", "some-url");
request.send(formData);
这两种方法是否等效?使用FileReader
是否有任何优势,而不是FormData
?它们中哪一个更高效?