2012-02-06 30 views
5

Estoy obteniendo datos de una solicitud de obtención. Los datos (en el cuerpo de la respuesta) es como la siguiente:nodejs escribe datos de imágenes en bruto en un archivo 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ý:\ ..... 

cabeceras de la respuesta de este aspecto:

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 

que desea obtener el contenido del cuerpo que es mis datos de imagen y guardar a un archivo name.jpeg en el servidor.

¿Cómo puedo hacer eso? Intenté usar búferes combinados con el módulo fs, pero estoy algo perdido.

Gracias

Respuesta

13

He aquí un ejemplo, que descarga a http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpgname.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

mente. FUNCIONA. Gracias. – zumzum

+0

De acuerdo, de nada – stewe

+0

Entonces, ¿puedo tener varias transmisiones abiertas al mismo tiempo? Me gustaría escribir varias imágenes en el disco al mismo tiempo, pero cuando traté de poner esto en un bucle, se volvió un poco loco y se colgó. Entonces, si hago una imagen en el momento, funciona. ¿Puedo tener varias transmisiones ejecutándose al mismo tiempo? – zumzum

7

Una versión ligeramente más corto, que utiliza 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')); 
}); 
NUNCA
+2

para mí esta es una respuesta mejor que la aceptada – Alexey

Cuestiones relacionadas