1

我尝试使用 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 吗?

提前致谢

4

0 回答 0