やりたいこと
- 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
プレビュー

