2012-02-06 17 views
5

Ricevo dati da una richiesta get. I dati (nel corpo della risposta) simile a questa:nodejs scrive i dati delle immagini raw in file 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ý:\ ..... 

intestazioni di risposta simile a questa:

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 

voglio ottenere il contenuto del corpo che è il mio dati di immagine e salvare su un file name.jpeg sul server.

Come posso farlo? Ho provato a utilizzare i buffer in combinazione con il modulo fs, ma sono perso.

Grazie

risposta

13

Ecco un esempio, che scarica http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg a name.jpeg

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

MIND. FUNZIONA. Grazie. – zumzum

+0

Va bene, prego – stewe

+0

Quindi posso aprire più flussi contemporaneamente? Mi piacerebbe scrivere più immagini su disco allo stesso tempo, ma quando ho provato a mettere questo in un ciclo è andato un po 'pazzo e si è schiantato. Quindi se faccio un'immagine nel momento in cui funziona. Posso avere più stream in esecuzione contemporaneamente? – zumzum

7

Una versione leggermente più corta, che utilizza 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')); 
}); 
MAI
+2

per me questa è una risposta migliore di quella accettata – Alexey

Problemi correlati