Web worker:当我尝试读取在主线程中创建的文件时,NotFoundError

时间:2014-02-03 00:41:28

标签: javascript html5 google-chrome web-worker html5-filesystem

在Chrome 32中,我有一个JS应用程序,我将原始图像从画布写入文件,我想关闭文件并将其打开以便在工作程序中进行处理。 我将文件名传递给worker,我可以看到它被找到并打开但是一旦我尝试读取它就会得到一个DOM异常(NotFoundError)。

// In my worker:
fs = self.requestFileSystemSync(self.PERSISTENT, quota);
var f = fs.root.getFile(rawFileName, {create: false});  // this works, f is valid
var reader = new FileReaderSync();
// At this point, 'reader' looks ok
rawFramesArrayBuffer = reader.readAsArrayBuffer(f); // My exception is thrown here.
log("Opened " + rawFileName + " for reading.");

在我的主要帖子中,我尝试将FileFileWriter设置为undefined以确保文件已关闭(我看不到执行此操作的方法),但它没有帮助。在任何情况下,spec says如果文件被锁定,则NotReadableError应该被抛出,但我没有看到。

如果我单步执行代码,当我跨过readAsArrayBuffer行然后抛出NotFoundError时,所有内容都会暂停约5秒钟。

如果我创建一个DirectoryReader并枚举所有文件,我可以看到我的文件存在。

2 个答案:

答案 0 :(得分:1)

您可能希望将图像传递给工作人员而不是保存图像并让工作人员打开文件。

这是一个包含示例代码的页面

http://kinderas.blogspot.com/2011/06/html-5-web-workers-and-image-processing.html

但它确实取决于你的图像有多大。

我发现这很有趣,但没有尝试过用电脑摄像头进行处理,所以它可以帮助你。

http://blog.aviary.com/posts/live-image-processing-with-getusermedia-and-web-workers

答案 1 :(得分:0)

我需要通过FileEntry访问该文件:

rawFramesArrayBuffer = reader.readAsArrayBuffer(f.file());