我尝试创建使用XHR2和Web worker上传文件的代码。 我以为我应该使用网络工作者,所以如果文件很大,网页就不会冻结。
这不起作用有两个原因,我之前从未使用过网络工作者,我希望同时使用相同的xhr向服务器发布文件和变量。当我说vars时,我指的是文件的名称,以及一个int。
Heres是我得到的
客户端
//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
});
在worker(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。服务器端没有INSERT。
这可能,同时发送文件和文本吗?我错过了什么?
我需要将文本和int与文件一起传递,因此服务器端不仅会上传文件,而且如果文件成功上传,还会将int和文本INSERT到数据库。使用formData和xhr这很容易,但是,将Web工作者放在中间,我无法正确使用。
另外,我可以使用Transferable Objects加快速度吗?所有主流浏览器都支持Transferable对象吗?
提前致谢