electron6系から8系へバージョンアップした際に、4G以上の大きいサイズのファイルにおいて、ビルド後ローカルファイルが読み込めなくなりました(windowsのみ。ローカル起動では可能)
Mac OSでは読み込みが可能でした
どこにも情報が無く数週間悩んだのでまとめてみました
環境
- electron バージョン: electron 8.3.1
- OS: windows10 64bit
- ビルド: electron-builder 22.1.0
XMLHttpRequest (XHR) 通信でローカルファイル読み込み
期待する値
- readyState=4(DONE)になる
- onloadイベントが発火
実際の値
- readyState=3(LOADING)のまま
- onprogress でずっと読み込み中 (totalの値まで到達してもonloadが呼ばれない)
- ontimeoutも発火せず...
対応
- 32bit アプリを 64bit に変更(electron-builderにて、ビルドの引数を変更した)
- 「electron-builder build --win --ia32」 -> 「npm run obfuscation && electron-builder build --win --x64」
補足(XMLHttpRequestで通信エラーになっているときの判定)
- totalフィールド: 全転送バイト数
- loadedフィールド: これまで転送されたバイト数
- 通信エラーになっている時以下になっている(全体の長さが不明の状態)
- total = 0
- lengthComputable = false
xhr.js
// データ受信中のイベントvarxhr=newXMLHttpRequest();xhr.onprogress=function(oEvent){if(oEvent.lengthComputable||xhr.total!==0){varpercentComplete=oEvent.loaded/oEvent.total*100;// ...}else{// 全体の長さが不明なため、進捗情報を計算できない}