環境
$ node -v
v16.2.0
$ yarn info https version
1.0.0
$ yarn info fs version
0.0.1-security
$ yarn info typescript version
4.3.2
コード
使いやすいようにPromiseを併用しています。
コードは TypeScriptなので、JavaScriptの場合は型定義を消してください。
const download = (uri: string, filename: string) => {
return new Promise<void>((resolve, reject) =>
https
.request(uri, (res) => {
res
.pipe(createWriteStream(filename))
.on("close", resolve)
.on("error", reject);
})
.end()
);
};
download(
"https://cdn2.bulbagarden.net/upload/thumb/8/88/006Charizard-Gigantamax.png/600px-006Charizard-Gigantamax.png",
"Charizard-gmax.png"
).then(() => console.log("done"));
ローカルに Charizard-gmax.png
というファイルがダウンロードできているのが確認できます。
かんたんな解説
res.pipe は引数に stream.Writable オブジェクト (今回の場合は fs.createWriteStream ) を指定することで、そのオブジェクトにすべてのデータを自動で流し込んでくれます。