Tengo un problema extraño con un módulo Node.js (v0.4.12) en el que estoy trabajando. Es un módulo CouchDB, y aunque estoy bastante seguro de que CouchDB no es el problema aquí, lo incluiré ya que puede ser información útil.Node.js piping http.ClientRequest en fs.createWriteStream con archivos binarios conduce a archivos dañados/inflados
De todos modos, estoy escribiendo un contenedor para cargar y descargar archivos adjuntos con CouchDB. Tengo la parte de carga funcionando muy bien, es la parte de descarga con la que tengo dificultades.
Mi proceso de prueba es ésta:
- archivo de imagen Subir (
http.request
,fs.createReadStream
) - Descargar archivo (
http.request
) - Guardar el archivo descargado a una ubicación diferente para el control de comparación/corrupción (
fs.createWriteStream
,stream.pipe
)
Esto funciona bien con archivos de texto simple, pero archivos binarios como imágenes se comportan de manera diferente.
Como mencioné antes, la carga parece correcta. Como puedo visitar la URL en CouchDB y ver la imagen. (el tamaño coincide y representa la imagen que cargué) Cuando uso mi módulo para descargar el archivo y guardarlo, el archivo de salida es más grande que el archivo fuente, (50-100% más grande) y no puede ser abierto por ninguna imagen editores. (por lo tanto, está "dañado" de alguna manera)
¿Me falta algo sobre Streams cuando se trata de archivos binarios? He intentado cambiar el encoding
en ambos lados a "binary"
y "base64"
, pero el archivo de salida todavía es un 50% más grande que la fuente. Antes de descubrir la opción de codificación, estaba configurada en "utf8"
, y el archivo de salida era 100% más grande, lo que me lleva a pensar que esto es un problema de codificación en algún lugar de allí.
También intenté conectar manualmente las transmisiones (en lugar de utilizar el método pipe
) pero el resultado es el mismo.
¡Ajá, esto fue lo que hizo! ¡Un millón de gracias! –