LoginSignup
4
6

More than 3 years have passed since last update.

Node.jsのFileSystemでインターネットから画像をダウンロードする(with request-promise))

Posted at

Node.jsにはfsと呼ばれるモジュールがあり、ファイルを作成したり読み込んだりすることができます。

これを用いてインターネット上にある画像をダウンロードすることができます。

事前準備

Node.jsが使えるように環境構築する。
今回は初心者も簡単!UbuntuでNode.jsの環境構築で紹介した環境で実行する。

また、今回使用するモジュールをnpmコマンドでインストールします。

npm install fs request request-promise —-save

別にrequest-promiseを使わなくても実現できるのですが、今回はあえてrequest-promiseを用いて実装したいと思います。
なお、request-promiseを使うときは依存性の事情からrequestもインストールするようにしましょう。

流れ

非常にシンプルです。
1. 画像のURLを定義する
2. fs.createWriteStreamで書き込みファイルを用意する
3. URLにリクエストを送り、取得した内容をファイルに書き込む

実装すると以下のようになります。

index.js
const rp = require('request-promise');
const fs = require('fs');

// Downloadしたい画像のURLを記載
const url = 'http://www.example.com/hoge.jpg'

// ファイル名を記載
// 事前にimgディレクトリを用意する必要がある
const file = fs.createWriteStream('./img/hoge.jpg');

// URLにアクセスしてファイルに書き込む
rp(url).pipe(file);

あとは以下コマンドでファイルを実行するとimgディレクトリ内に画像ファイルが格納されます。

node index.js

個人用メモ

URLにアクセスしたとき、バイナリデータを受け取り、そのバイナリデータをファイルにpipeすることでファイルに画像情報が書き込まれ、そのファイルを開くと画像が表示される。つまり画像のダウンロードというのはインターネットから画像情報をバイナリ形式で受け取り、その内容を作成したファイルに書き込むことだということか。
よくわかっていないけど。

まとめ

とりあえずnode.jsを用いて画像をインターネットからダウンロードできるようになりました。
これとNode.jsでニュース記事をWebスクレイピングしてみようの内容を組み合わせることで画像も出力できるスクレイピングプログラムが書けるようになります。
近々試してみようと思います。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6