2017-02-27 81 views
0

我試圖將文件下載到電子應用程序中的文件系統。我的代碼,在主線程,如下所示:電子應用程序createWriteStream拋出ENOENT錯誤

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,19n被提及的是代碼中的const file = fs.createWriteStream( $ {dir}/$ {name} );行。

我已經嘗試了大約十幾個其他類似的stackoverflow答案提供的解決方案,但沒有解決這個問題。

這是怎麼回事?

感謝。

回答

1

構建的Electron應用程序使用Asar格式。 Asar是一種檔案格式(它實際上只是一個大文件),但在Electron中,您可以像閱讀標準目錄一樣讀取它。

我推測(儘管我沒有看到它有明確的記錄),它不可能用fs函數寫入Asar。無論如何,幾乎肯定會有更合適的位置來寫入數據。

嘗試寫入不同的路徑。 Electron使用app.getPath(name)提供了許多有用的路徑,例如,您可以寫入userData目錄,該目錄保存應用程序的配置文件。

相關問題