我正在尝试将文件下载到电子应用中的文件系统中。我的代码在主线程中看起来像这样:
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
构建它之后,我在警告中收到错误:
未捕获的例外情况: 错误:在/Users/nicholasstephan/Desktop/XXXXXXX/dist/Mac/XXXXXX.app/Contents/Resources/app.asar中找不到ENOENT,media / uploads_2016_02_BASF_Holistic_Program.jpg 在notFoundError(ELECTRON_ASAR.js:109:19) at Object.module。(匿名函数)[as open](ELECTRON_ASAR.js:209:16) 在WriteStream.open(fs.js:1890:6) 在新的WriteStream(fs.js:1876:10) at Object.fs.createWriteStream(fs.js:1831:10) 在下一个(/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答案中提供的解决方案,但没有一个能解决问题。
这里发生了什么?
感谢。
答案 0 :(得分:2)
内置的Electron应用使用Asar格式。 Asar是一种存档格式(它实际上只是一个大文件)虽然在Electron中你可以从中读取它就好像它是一个标准目录。
我认为(虽然我没有看到它明确记录),不可能使用fs
函数写入Asar。在任何情况下,几乎可以肯定更适合写入数据的位置。
尝试写入不同的路径。 Electron使用app.getPath(name)
提供了许多有用的路径,因此您可以例如写入保存应用程序配置文件的userData
目录。