File 将文件传输到webworker:DataCloneError:无法克隆对象

File 将文件传输到webworker:DataCloneError:无法克隆对象,file,web-worker,pass-data,File,Web Worker,Pass Data,我想将文件从表单传输到webworker。在chrome i simple中,可以使用以下代码传输文件列表对象: worker.postMessage(files: array_files); 但使用Firefox时,我会遇到以下错误: Transfer file to webworker: DataCloneError: The object could not be cloned. 所以我尝试使用可转移对象的语法。像这样的 var post = {files: array_files,

我想将文件从表单传输到webworker。在chrome i simple中,可以使用以下代码传输文件列表对象:

worker.postMessage(files: array_files);
但使用Firefox时,我会遇到以下错误:

Transfer file to webworker: DataCloneError: The object could not be cloned.
所以我尝试使用可转移对象的语法。像这样的

var post = {files: array_files, file_ids: response.file_ids};
worker.postMessage(post, [post]);
但有了它,我就可以用铬合金做这个了

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': Value at index 0 does not have a transferable type.
还是

DataCloneError: The object could not be cloned.
在Firefox中


将文件列表传递给工作人员的正确方法是什么?

我不知道如何通过postMessage传递文件对象,但至少我可以建议可转移对象不能以这种方式工作。可选的第二个参数是要传递的任何类型化数组的支持ArrayBuffer实例的数组。例如,假设您要发布的消息是一个结构化对象:

var message = {foo: 'abc', bar: new Uint8Array(...)};

worker.postMessage(message, [message.bar.buffer])

还请注意,将类型化数组作为可转移对象传递给另一个工作者/窗口会使发送工作者/窗口无法访问已转移的数组

有一个Mozilla bug,所以除非有人修复它,否则你就不走运了。事实上,我愿意修复,但是我不喜欢制作Firefox版本,所以如果有人可以替我制作,那么我就可以处理代码。我也有同样的问题,
对象无法克隆。
那是因为我只是引用了我消息中的参数。你能提供更多的代码吗?