Estoy usando Express.js
y tengo una ruta para subir imágenes que luego necesito cambiar el tamaño. Actualmente solo dejo Express
escribir el archivo en el disco (que creo que usa node-formidable
debajo de las cubiertas) y luego cambiar el tamaño usando gm
(http://aheckmann.github.com/gm/) que escribe una segunda versión en el disco.Archivo de transmisión cargado con Express.js a través de gm para eliminar la escritura doble
gm(path)
.resize(540,404)
.write(dest, function (err) { ... });
He leído que se puede obtener una bodega de la corriente node-formidable
archivo antes de que lo escribe en el disco, y desde gm
puede aceptar una corriente en lugar de sólo un camino, yo debería ser capaz de pasar este derecho mediante la eliminación de la doble escritura en el disco.
Creo que necesito para anular form.onPart
pero no estoy seguro de que (se ha de hacer como Express
middleware?) Y no estoy seguro de cómo obtener una bodega de form
o qué es exactamente lo que hacer con el part
. Este es el esqueleto del código que he visto en algunos lugares:
form.onPart = function(part) {
if (!part.filename) { form.handlePart(part); return; }
part.on('data', function(buffer) {
});
part.on('end', function() {
}
}
¿Alguien puede ayudarme a unir estas dos piezas? ¡Gracias!
¡Gracias! Esto me dio el 95% del camino allí. Mi último problema es que 'gm' es asíncrono y, por lo tanto, el análisis del formulario vuelve antes de que el cambio de tamaño esté realmente completo (lo que significa que la URL que tenía para el cliente aún no es buena). ¿Hay alguna manera de dejar que 'formidable' sepa cuándo el manejo de la 'parte' está realmente completo? – Bill
En realidad, terminé manejando esto en el cliente en su lugar, funciona mejor de esa manera. ¡Gracias de nuevo! – Bill
stdout es un Stream. Es por eso que puede canalizarlo() a un archivo WriteStream. Y eso significa que tiene un evento "final" que puedes escuchar. Simplemente haga stdout.on ('end', fn) y es entonces cuando puede decirle al cliente que el trabajo está hecho. – juandopazo