2012-02-06 32 views
5

我從獲取請求中獲取數據。該數據(在響應主體)看起來是這樣的:nodejs將原始圖像數據寫入jpeg文件?

... ÿÀ���"�ÿÄ��������������ÿÄ�N��!1"AQa2q¡#BR±ð3brS²ÁÂÑá$ñCDTst¢³&45dÃÒÿÄ������������ÿÄ�-������!1A"Qa¡ðq±ÁÑ2áÿÚ���?�û." """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """R1º#ª¥7Jíî½M6îNö ]·!]=Fv­ß`7~qÆee²%·JokkZüCbìþ<ù{ã9öùË®´(%A,Ià�2I?t×bn6wÆù¥V 2SÀ><k5ºÙØ92EhÎçü¨/aÝ!ã|ñþ¥ñßT}U«¦ÒÚµ«xuÕfƳ KØ {ù{ð$·DúBMZÆcp}´R|Mä2ó8üg)·ùôfõ$zXiRÞü}óÆ>,êÚûíR5ý:\ ..... 

響應標題是這樣的:

HTTP/1.1 200 OK 
Content-Length: 26965 
Access-Control-Allow-Origin: * 
Content-Type: image/jpeg; charset=UTF-8 
Date: Mon, 06 Feb 2012 21:14:21 GMT 
Expires: Mon, 06 Feb 2012 22:14:21 GMT 
Cache-Control: public, max-age=3600 
Last-Modified: Fri, 13 Feb 2009 23:31:30 GMT 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Server: Dropta Server 1.0 
X-Frame-Options: SAMEORIGIN 
Connection: close 

我想要得到的主體內容是我的圖像數據並保存它到服務器上的​​文件。

我該怎麼做?我嘗試使用緩衝區結合fs模塊,但我有點失落。

感謝

回答

13

下面是一個例子,它下載到http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg​​

var fs=require('fs'); 
var http=require('http'); 

var f=fs.createWriteStream('name.jpeg'); 

var options={ 
    host:'upload.wikimedia.org', 
    port:80, 
    path:'/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg' 
} 

http.get(options,function(res){ 
    res.on('data', function (chunk) { 
     f.write(chunk); 
    }); 
    res.on('end',function(){ 
     f.end(); 
    }); 
}); 
+1

沒關係。有用。謝謝。 – zumzum 2012-02-06 22:59:35

+0

好的,不客氣 – stewe 2012-02-06 23:06:34

+0

那麼我可以同時打開多個流嗎?我想同時將多個圖像寫入磁盤,但是當我試圖將它放在一個循環中時,它變得有點瘋狂並且崩潰。所以如果我在它的時間做一個圖像。我可以同時運行多個流嗎? – zumzum 2012-02-07 16:53:09

7

稍短的版本,它使用Stream.pipe

var http = require('http'), 
    fs = require('fs'), 
    imgSource = 'http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg'; 

http.get(imgSource, function(res) { 
    res.pipe(fs.createWriteStream('wiki.jpg')); 
}); 
+2

對我來說這是一個比接受的更好的答案 – Alexey 2017-03-24 18:20:30

相關問題