9
10

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 5 years have passed since last update.

node.jsのhttp.requestでバイナリをBufferに格納する

Last updated at Posted at 2015-08-07

任意URLのバイナリファイルをBufferで取得する方法。

古い方は非推奨の指定があるのでこちらで。

const http = require('http');
var options = {}; //いろいろ入ってるでしょう。
var req = http.request(options,
  function(res) {
    // Bufferの配列。
    var data = [];
    res.on('data', function (chunk) {
      data.push( chunk ); 
    });
    res.on('end', function () {
      // dataにはBufferがいくつかあるので、concatで結合可能。
      var buf = Buffer.concat( data );
    });
  });
req.end();

また単にダウンロードなら次のような形でも取得可能です。

import http from 'http';

http.get( 'http://...', function (res) {
    const data = [];
    res.on('data', function (chunk) { data.push( chunk ); });
    res.on('end', function () {
      const buf = (res.statusCode === 200) ? Buffer.concat( data ) : null;
    });
  });

古い

バイナリを結合したい

node.jsにてhttp.requestを使ってデータを受け取る際、chunkでデータを受け取れるが、これはres.setEncoding('binary')指定時にはバイナリのある程度つまった変数となる。
これをそのまま文字列の時のように+=でつなげばバイナリが壊れ、どっかのサンプルにあるようにchunkを配列に入れてあとでBuffer.concatしてもchunkはBufferじゃないので失敗してしまう。

そんな状況でバイナリをBufferに格納する。

const http = require('http');
var options = {}; //いろいろ入ってるでしょう。
var req = http.request(options,
  function(res) {
    // バイナリで受け取る。
    res.setEncoding('binary');
    // Bufferの配列。
    var data = [];
    res.on('data', function (chunk) {
      // chunkをBufferに変換。
      // ちなみに'binary'指定は非推奨らしい。代わりに何使えばいいんだろう?
      data.push( new Buffer( chunk, 'binary' ) );
    });
    res.on('end', function () {
      // dataにはBufferがいくつかあるので、concatで結合可能。
      var img = Buffer.concat( data );
    });
  });
req.end();

こんな感じで、imgには無事バイナリデータ(Buffer)が格納されました。

もうnode.jsでバイナリいじりたくないよぉ。

9
10
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
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?