1
http.get('http://path/to/image.jpg', function (res) {
  var img = '';
  res.on('data', function (buff) {
    img += buff;
  });
  res.on('end', function () {
    var data = querystring.stringify({
      image: img.toString('base64'),
      type: 'base64'
    });
    var opts = {
      host: 'api.imgur.com',
      path: '/3/image',
      method: 'POST',
      headers: {
        'Authorization': 'Client-ID myId',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': data.length
      }
    };
    var req = https.request(opts, function (res) {
      res.on('data', function (buff) {
        console.log(buff.toString());
      });
    });
    req.end(data);
  });
});

imgURLからダウンロードした文字列です。実行すると、次のようになります。

querystring.js:114
  return encodeURIComponent(str);
         ^
URIError: URI malformed

投稿データをImgurに正しく送信するにはどうすればよいですか?

4

2 に答える 2

1

ここに問題があります:あなたimgはバイナリデータを含む文字列になり、正しくbase64でエンコードされません. switewvu24 が言及しているように、base64 でエンコードするときにバッファーが必要です。残念ながら、その解決策も正確ではありません。

あなたがすでに持っているものからの最小の変更は、次のような新しいバッファを作成することです:

var data = querystring.stringify({
  image: new Buffer(img, 'binary').toString('base64')
});

に注意してください'binary'。これにより、正しいデータ変換が確実に得られます。別の解決策は、画像をダウンロードするときに、文字列を連結する代わりに、配列内のすべてのチャンクを収集し、それから次のようにバッファを作成することBuffer.concatです。

http.get('http://path/to/image.jpg', function (res) {
  var imgData = [];
  res.on('data', function (buff) {
    imgData.push(buff);
  });
  res.on('end', function () {
    var img = Buffer.concat(imgData);
    var data = querystring.stringify({
      image: img.toString('base64'),
      type: 'base64'
    });
    // ...
于 2013-02-05T11:44:44.643 に答える
0

試す

var データ = querystring.stringify({
  画像: new Buffer(img).toString('base64')
});
于 2013-02-05T05:40:30.977 に答える