我尝试使用 XHR2 和网络工作者创建代码来上传文件。我想我应该使用 web workers ,所以如果文件很大,网页不会冻结。
这不起作用有两个原因,我以前从未使用过网络工作者,并且我想使用相同的 xhr 同时将文件和 vars 发布到服务器。当我说 vars 时,我的意思是文件名和一个 int。
这是我得到的
客户端
//create worker
var worker = new Worker('fileupload.js');
worker.onmessage = function(e) {
alert('worker says '+e.data);
}
//handle workers error
worker.onerror =werror;
function werror(e) {
console.log('ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message);
}
//send stuff to the worker
worker.postMessage({
'files' : files, //img or video
'name' : nameofthepic, //text
'id':imageinsertid //number
});
工作人员内部(fileupload.js 文件)
onmessage = function (e) {var name=e.data.name; var id=e.data.id ; var file=e.data.files;
//create a var to catch the anser of the server
var datax;
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (xhr.status == 200) {datax=xhr.response;}
else { datax=525;}//actually, whatever, just give a value
};
xhr.open('POST', 'upload.php');
xhr.send(file,name,id);
//i also tried xhr.send('file=file&name=name&id=id'); and still nothing
//i also tried just the text/int xhr.send('name=name&id=id'); and still nothing
我很困惑。我无法向服务器发送任何内容。我没有从工人那里得到任何反馈。我什至不知道数据是否发送到 fileupload.js。服务器端不插入。
可以同时发送文件和文本吗?我错过了什么?
我需要将 text 和 int 与文件一起传递,因此服务器端不仅会上传文件,而且如果文件上传成功,还会将 int 和 text 插入数据库。仅使用 formData 和 xhr 就很容易,但是,将网络工作者放在中间,我无法做到。
另外,我可以使用 Transferable Objects 来加快速度吗?所有主流浏览器都支持 Transferable Objects 吗?
提前致谢