【发布时间】:2021-01-31 05:47:20
【问题描述】:
有两种方法可以使用 Ajax (XHR2) 上传文件。首先,我可以将文件内容读取为数组缓冲区或二进制字符串,然后使用 XHR send 方法进行流式传输。比如shown here:
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将我的文件上传为shown here:
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 有什么好处吗?一个比另一个性能更好吗?
【问题讨论】:
-
看起来像文件阅读器流,所以对于大文件更有用。
标签: javascript ajax filereader