2011-08-15 27 views
18

Estoy intentando codificar una imagen usando base64 en Node.JS para pasar a la API de PostageApp como un archivo adjunto. Pensé que lo tenía funcionando pero adjunta un archivo de 1K que no es exactamente lo que estaba buscando.Node.JS - Codificación de imágenes en base64 usando el Buffer

Aquí está mi código:

var base64data; 

fs.readFile(attachment, function(err, data) { 
    base64data = new Buffer(data).toString('base64'); 
}); 

Y aquí es la parte de la llamada a la API que estoy haciendo:

attachments: { 
    "attachment.txt" : { 
    content_type: "application/octet-stream", 
    content: base64data 
    }, 
} 

estoy un poco perdido, al no ser tan grande con el Nodo, pero pensé que funcionaría ¡Cualquier ayuda sería apreciada!

+0

@Jim Schubert, ese consejo está mal Y mal. Primero, readFile lee todo el archivo, no fragmentos. En segundo lugar, bloquear el código bloquearía todo el servidor, idea estúpida. – thejh

Respuesta

36
fs.readFile(attachment, function(err, data) { 
    var base64data = new Buffer(data).toString('base64'); 
    [your API call here] 
}); 

Se necesita algún tiempo hasta que los resultados están ahí, de manera que cuando usted tiene los datos, la ejecución alcances exterior ya está terminado.

+0

Desafortunadamente, paso 'base64data' en una carga, que es esencialmente un hash JSON, que luego envío al servidor API. ¿Sería esto preferible a lo que estoy haciendo? – JonLim

+0

@JonLim, esta es básicamente la única forma de hacerlo. Tendrás que hacer todo eso ("pasar base64data en una carga útil, que básicamente es un hash JSON, que luego POSTAR al servidor API") dentro de la devolución de llamada. – thejh

+0

Ah. No hay otra forma de evitarlo? Eso apesta, porque el parámetro de archivos adjuntos es opcional, por lo que si no hay archivos adjuntos, no se incluye. ¡Gracias! – JonLim

9

Simplemente especifique "base64" como la codificación. Per the docs:

Si no se especifica ninguna codificación, se devuelve el búfer en bruto.

fs.readFile(attachment, {encoding: 'base64'}, function(err, base64data) { 
    [your API call here] 
}); 
+0

¿No está codificando para readFile la codificación del archivo adjunto y no lo que desea codificar? – Sam

+1

en el documento, 'La codificación puede ser cualquiera de las aceptadas por Buffer. Aunque es de' createReadStream'. Probé lo que @hyphenthis dijo y funcionó. – Kennyhyun

Cuestiones relacionadas