3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NodeJsで画像ファイルのダウンロードと保存(request編)

Last updated at Posted at 2022-09-22

はじめに

NodeJsで外部サーバーからダウンロードした画像ファイルをローカルに保存する時の注意点をまとめる。

サンプルソース(修正前)

「NodeJsで外部サーバーからダウンロードした画像ファイルをローカルに保存する」と聞いてサクッと作ったサンプルが以下。

サンプルソース(修正前)
var options = {
    uri: "http://local_nginx_server_ip/globalipcam_resize_snap"
};

request.get(options, function(error, response, body) {
    if (!error) {
        fs.writeFile("/saved_images/snap.jpg", body, function(errorWrite) {
        });
    }
});

 ※今時そんなコード???って驚かないで。色々理由があるのだ。

この時保存したsnap.jpgが画像ビューアでうまく表示されない。

バイナリエディア(BZ)で表示してみると、、、

正しくないsnap.png

"JFIF"などのキーワードは確認できるが、先頭が"FFD8"になっていない。

サンプルソース(修正後)

サンプルソース(修正後&抜粋)
var options = {
    uri: "http://local_nginx_server_ip/globalipcam_resize_snap",
    encoding: null
};

encodingを省略(上記"encoding: null"の行そのものを省略)したら"UTF-8"が指定されたことになるようなので、バイナリエディタで見た時の先頭が"FFD8"になっていなかったのはUTF-8 BOMの影響と思われる。
"encoding: null"はエンコードしない的な意味合いと思われる。

UTF-8 BOMは"EFBBBF"のようだ。でもバイナリエディタで"EFBFBDEF..."になる理由は現時点では不明。

修正後のソースを利用して保存したsnap.jpgは、、、

正しいsnap.png

先頭が"FFD8"になっており、画像ビューアでもうまく表示された。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?