WebWorker无法执行readAsDataURL' on' FileReaderSync'

时间:2015-12-08 16:14:42

标签: angularjs cordova filesystems cordova-plugins web-worker

我有一个应用程序可以拍摄照片/视频并将其发送到保存此照片/视频的服务器。

要拍照我使用的是cordova-plugins:

navigator.device.capture.captureImage(
                    function (fileURL) {
                        defer.resolve(fileURL);
                    },
                    function (errorData) {
                        defer.reject(errorData);
                    });

我的任务是创建将在后台处理文件的WebWorker(不在主线程中):

  • 将从文件
  • 获取base64
  • 将base64发送到服务器(服务器将此数据保存到数据库中)

要编码我正在使用:

  • VisualStudio Enterprise 2015及更新1
  • 用于Apache Cordova的Visual Studio工具更新3(Cordova v5.3.3)
  • AngularJS v1.4.8

当我不使用WebWorker时,一切都很好用:

window.resolveLocalFileSystemURL(
                    fileURL,
                    function (fileEntry) {
                        return fileEntry.file(function(data) {
                           var reader = new FileReader();
                            reader.onloadend = function (evt) {
                                InsertMedia(...); // data inserted on my server
                            };
                            //convert file to base64 formats
                            reader.readAsDataURL(data);
                        });
                    },
                    function (errorData) {
                        defer.reject(errorData);
                    });

然后我创建了名为&doff.js'

的WebWorker
self.addEventListener('message', function (e) {
    var data = e.data;  
    try
    {
        self.postMessage(e.data instanceof File); // will return 'false'
        var reader = new FileReaderSync();
        reader.readAsDataURL(data);
    }
    catch (err) {
        self.postMessage(err.message);
    }
}, false);

从主线程中使用这个工作者:

window.resolveLocalFileSystemURL(
                    fileURL,
                    function (fileEntry) {
                        return fileEntry.file(function (data) {
                            alert(data instanceof File); // will return 'true'
                            var worker = new Worker('doWork.js');
                            worker.addEventListener('message', function (e) {
                                alert(e.data);
                            }, false);
                            worker.postMessage(data);
                        });
                    },
                    function (errorData) {
                        defer.reject(errorData);
                    });

使用WebWorker后,我总是遇到这个问题: WebWorker无法执行“readAsDataURL' on' FileReaderSync':在处理操作时找不到请求的文件或目录

我如何处理WebWorker中的文件?

0 个答案:

没有答案