Sto utilizzando Express.js
e ho un percorso per caricare le immagini che devo quindi ridimensionare. Attualmente mi limito a scrivere il file su disco (che credo utilizzi node-formidable
sotto le copertine) e ridimensionarlo utilizzando gm
(http://aheckmann.github.com/gm/) che scrive una seconda versione sul disco.File di flusso caricato con Express.js tramite gm per eliminare la doppia scrittura
gm(path)
.resize(540,404)
.write(dest, function (err) { ... });
Ho letto che si può ottenere una sospensione del flusso node-formidable
file prima che scrive su disco, e dal momento che gm
può accettare un flusso invece di un percorso, dovrei essere in grado di passare questo diritto eliminando la doppia scrittura su disco.
Penso di aver bisogno di ignorare form.onPart
, ma non sono sicuro dove (dovrebbe essere fatto come Express
middleware?) E io non sono sicuro di come ottenere una sospensione di form
o che cosa esattamente a che fare con la part
. Questo è lo scheletro del codice che ho visto in alcuni punti:
form.onPart = function(part) {
if (!part.filename) { form.handlePart(part); return; }
part.on('data', function(buffer) {
});
part.on('end', function() {
}
}
Qualcuno può aiutarmi a mettere insieme questi due pezzi? Grazie!
Grazie! Questo mi ha fatto il 95% del modo in cui ci sono. Il mio ultimo problema è che 'gm' è asincrono e quindi l'analisi della forma ritorna prima che il ridimensionamento sia effettivamente completato (il che significa che l'url che ho ricevuto dal client non è ancora buono). C'è un modo per far sapere a 'formidable 'quando la gestione di' parte' è effettivamente completa? – Bill
In realtà, ho appena finito di gestirlo sul client - funziona meglio in questo modo. Grazie ancora! – Bill
stdout è un flusso. Ecco perché puoi pipe() su un file WriteStream. Ciò significa che ha un evento di "fine" che puoi ascoltare. Basta fare stdout.on ('end', fn) e questo è quando puoi dire al cliente che il lavoro è finito. – juandopazo