node.js - Electron 应用程序 createWriteStream 抛出 ENOENT 错误

标签 node.js electron fs enoent

我正在尝试将文件下载到 Electron 应用程序中的文件系统。我的代码在主线程中如下所示:

const dir = `${__dirname}/media`;
if (!fs.existsSync(dir)){
    fs.mkdirSync(dir);
}

const file = fs.createWriteStream(`${dir}/${name}`);
file.on("open", function() {
    const request = http.get(url, function(response) {
        response.pipe(file);

        response.on('end', function() {
            file.close();
            ...
        });
    });

    request.on('error', function(err) {
        ...
    });
});

这在使用 electron 进行开发时有效。 但是在我使用 electron-builder 构建它之后,我在警告中收到错误:

Uncaught Exception: Error: ENOENT, media/uploads_2016_02_BASF_Holistic_Program.jpg not found in /Users/nicholasstephan/Desktop/XXXXXXX/dist/Mac/XXXXXX.app/Contents/Resources/app.asar at notFoundError (ELECTRON_ASAR.js:109:19) at Object.module.(anonymous function) [as open] (ELECTRON_ASAR.js:209:16) at WriteStream.open (fs.js:1890:6) at new WriteStream (fs.js:1876:10) at Object.fs.createWriteStream (fs.js:1831:10) at next (/Users/nicholasstephan/Desktop/XXXXXXXX/dist/Mac/XXXXXXXX.app/Contents/Resources/app.asar/media.js:19:18) at /Users/nicholasstephan/Desktop/XXXXXXXX/dist/Mac/XXXXXXXX.app/Contents/Resources/app.asar/media.js:52:4 ...

media.js,ln 19,被引用的是 const file = fs.createWriteStream(${dir}/${name} ); 代码中的行。

我已经尝试了十几个其他类似的 stackoverflow 答案中提供的解决方案,但没有一个解决了问题。

这是怎么回事?

谢谢。

最佳答案

构建的 Electron 应用程序使用 Asar格式。 Asar 是一种存档格式(它实际上只是一个大文件),但在 Electron 中你可以从中读取它,就好像它是一个标准目录一样。

我假设(尽管我没有看到它的明确记录)不可能使用 fs 函数写入 Asar。在任何情况下,几乎肯定有更合适的位置来写入数据。

尝试写入不同的路径。 Electron 使用 app.getPath(name) 提供了许多有用的路径例如,您可以写入包含应用配置文件的 userData 目录。

关于node.js - Electron 应用程序 createWriteStream 抛出 ENOENT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494701/

相关文章:

SQL繁琐添加数组作为参数

javascript - 如何在Quasar框架的 Electron 应用中制作多页?

javascript - Node.js 中找不到子目录中的文件

javascript - fs.createReadStream 之后代码块未执行

node.js - NestJs vs Loopback 4

javascript - 回调已经被称为异步并行

javascript - 如何在不等待页面重新加载的情况下为BrowserView切换网站?

javascript - fs.write 和 read 不更新

javascript - 使用 Node.js 的 fs.readFile() 返回出现字符串的行

macos - 隐藏窗口,而不是在Electron中关闭