【问题标题】:unable to read/write files from web worker无法从网络工作者读取/写入文件
【发布时间】:2020-12-16 23:18:20
【问题描述】:

我正在尝试读取已在本地计算机中创建的文本文件 (log.txt),并希望使用文件系统 api 方法将文本附加到来自 webworker 的同一文件,但无法这样做,也无法即使尝试使用 react app 有线应用通过 postMessage() 方法将错误发送到主线程,也会得到任何错误日志

//worker.js

*/* eslint no-restricted-globals: 0 */
        // eslint-disable-next-line no-restricted-globals
        self.requestFileSystemSync = self.webkitRequestFileSystemSync || self.requestFileSystemSync;
        // eslint-disable-next-line no-restricted-globals
        self.BlobBuilder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder;
        try {
                var fs = self.requestFileSystemSync(self.TEMPORARY, 1024 * 1024, onFs, onError);
        } catch (e) {
                onError(e);
        }
        function onFs(fs) {
            fs.root.getFile('/Downloads/log.txt', {}, function(fileEntry) {
            // Obtain the File object representing the FileEntry.
            // Use FileReader to read its contents.
            fileEntry.file(function(file) {
            var reader = new FileReader();
                postMessage("file reading process", file);
                reader.onloadend = function(e) {
                postMessage("file reading process result", this.result);
                };
                reader.readAsText(file); // Read the file as plaintext.
            }, onError);
            }, onError);
        }
        //append data to file
            function append(fs, filePath, blob) {
                postMessage("inside append functuin fs ", fs, filePath, blob);
                postMessage("inside append functuin filePath ", filePath);
                postMessage("inside append functuin blob ", blob);
                fs.root.getFile(filePath, {create: false}, function(fileEntry) {
                // Create a FileWriter object for our FileEntry.
                fileEntry.createWriter(function(fileWriter) {
                    fileWriter.seek(fileWriter.length); // Start write position at EOF.
                    fileWriter.write(bb.getBlob('text/plain'));
                }, onError);
            }, onError);
        }
        var bb;
        function onFs(fs) {
            postMessage("onFs function");
            bb = new Blob();
            postMessage("bb ", bb);
            bb.append("helloo world" + '\n');
            postMessage("bb after append", bb);
            append(fs, 'log.txt', bb.getBlob('text/plain'));
            postMessage("file writing", bb);
        }
        function onError(e) {
            postMessage('ERROR: ' + e.toString());
        }*

【问题讨论】:

  • 嗨 vijesh - 欢迎来到 Stack Overflow!您能否提供更多关于执行上述代码时发生的具体情况的详细信息?它似乎运行没有错误,但根本没有按照您的意图运行?
  • 因为我正在尝试读取数据并将数据附加到本地计算机上的现有文件中,但该文件无法正常工作,也没有出现任何错误

标签: web-worker native-file-system-api-js


【解决方案1】:

这是使用archaic API。您的标签使用表明您实际上打算使用现代File System Access API。我建议您尝试一下新的 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多