現在、私はGET
リクエストをサーバーに送信し、Webサイトから画像をダウンロードしてクライアントにデータを返すことを期待しています。ダウンロードした結果のデータをファイルに直接書き込むと、それが動作します。私はBuffer
オブジェクトを使用して、BASE64に変換して、それをクライアントに送信しようとするとtoString( 'base64')ノード内の無効な画像データが返される
app.get('/image', function(req, res) {
request("http://ipcam/auto.jpg", {encoding: 'binary'}, function(err, response, body) {
if (err) res.send(err);
fs.writeFile('logo ' + (Math.random() * 1000).toFixed(0) + '.jpeg', body, 'binary', function(err){
if (err) throw err
console.log('File saved.')
})
res.send(200);
});
});
しかし、img
タグが有効な画像データとしてそれを認識しません。これは、base64イメージデータのプレビューを表示するオンラインユーティリティを使用して確認されました。
サーバー:
res.send(new Buffer(body.replace(/(\r\n|\n|\r)/gm,""), 'binary').toString('base64'));
クライアント:
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText != undefined) {
var base64string = xmlHttp.responseText.replace(/(\r\n|\n|\r)/gm,"");
document.getElementById('image').src = 'data:image/jpeg;base64,' + base64string;
}
};
xmlHttp.open("GET", '/image', true);
xmlHttp.send();
編集:私は指摘したように、改行を削除正規表現を削除しました。しかしそれは助けにはならなかった。
現在のサーバー:
res.send(new Buffer(body, 'binary').toString('base64'));
現在のクライアント:
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText != undefined) {
document.getElementById('image').src = 'data:image/jpeg;base64,' + xmlHttp.responseText;
}
};
xmlHttp.open("GET", '/image', true);
xmlHttp.send();
「body」は、JPEG画像のバイナリを表す場合、改行をテキストファイルのように置き換えるのはなぜですか?これらのバイトはイメージ内で重要です。 –
あなたは正しいです。私は正規表現を削除しましたが、それはそれを修正しませんでした。キャッチをありがとう! – GPinskiy