やりたいこと
- Webサーバー上にあるasarファイルをNode.jsの
fs
モジュールとhttp
モジュールでローカルにダウンロードしたい request
モジュールで実装していたが、request
は非推奨のため、今後の保守のことも考えfs
とhttp
(今後非推奨になることが恐らくない)モジュールだけで実装したい
現状
- Web記事上にある
fs
とhttp
でバイナリ(画像)ファイルをダウンロードする方法のコードを写してasarファイルで試してみたが、createWriteStream
で生成されたファイルに中身がパイプで入れられれいなかった。 - 上記の方法では画像ファイルは問題なくダウンロードできた
以下コード例
// originalfs = original-fs var downloadFile = function (url, dest, cb) { var file = originalfs.createWriteStream(dest); https.get(url, function (res) { //res.setEncoding('binary'); res.pipe(file); file.on('finish', function () { res.pipe(file); console.log('finish'); file.close(cb); }); }); }; // 変数urlは省略 downloadFile(url, 'rendertest.asar', function (err) { console.log('end'); console.log(err); });
疑問
- なぜ画像はできたのにasarファイルはできないのか?
- asarファイルはバイナリファイルではないのか?
- asarファイルは
request
でしかダウンロードできないのか? node-fetch
/axios
/got
等、どのモジュールでやるのがいいのか?
よろしくお願いいたします。
追加
画像はできたのにasarファイルはできなかった原因について
画像はネット上のもの(普通のサーバーにある)を引っ張ってきたがasarファイルはGoogle Drive上でdrv.twを使いホスティングしていたのが原因
ローカルホストのサーバーからならasarファイルはダウンロードできた。
Google Driveの使用した流れについて
ホスティングしたサイトのURLに行ってファイルをダウンロードしようとすると、このようなページが表示される
このままだとダウンロードできないので、開発者ツールから「このままダウンロード」のところのformタグのaction
属性を見ることにした。
POSTのフォームタグで、GETのパラメータがあるURLだが、このURLにアクセスしたらファイルがダウンロードできたので、request
モジュールでこのURLを指定してasarファイルをダウンロードすることができた
問題はこのURLでhttp.get
でアクセスした時になぜか303のステータスコードになってダウンロードできないことである
このURLでもrequest
ならダウンロードできたので、303が出ても何かしらの処理をしてダウンロードができる??

回答1件
あなたの回答
tips
プレビュー