私はExpress.js
を使用していて、サイズを変更する必要がある画像をアップロードするルートを持っています。現在のところ、Express
はディスクにファイルを書き込んだり(node-formidable
を使っていると思います)、ディスクに2番目のバージョンを書き込むgm
(http://aheckmann.github.com/gm/)を使ってサイズを変更します。私はあなたがそれをディスクに書き込む前に、node-formidable
ファイルストリームを手に入れることができ、かつgm
以降だけではなく、パスの流れを受け入れることができる読んだdouble.writeを削除するために、Express.jsでgm経由でアップロードされたストリームファイル
gm(path)
.resize(540,404)
.write(dest, function (err) { ... });
、私はこの権利を渡すことができるはずですディスクへの二重書き込みを排除することで実現します。
私はform.onPart
を上書きする必要があると思うが、私はどこか分からない(それはExpress
ミドルウェアとして行われるべき?)、私はform
のホールドを取得するか、part
と正確に何をするかわかりません。これは私がいくつかの場所で見てきたコードスケルトンです:
form.onPart = function(part) {
if (!part.filename) { form.handlePart(part); return; }
part.on('data', function(buffer) {
});
part.on('end', function() {
}
}
は、誰かが私が一緒にこれら2つを入れて助けることができますか?ありがとう!
ありがとうございました!これは私にその道の95%を与えました。私の最後の問題は、 'gm'は非同期で、サイズ変更が実際に完了する前にフォーム解析が返されるということです(クライアントに戻ってきたURLはまだ良いとは言えません)。 'partid'ハンドリングが実際に完了したときに'恐ろしい 'を知らせる方法はありますか? – Bill
実際には、私はちょうど代わりにクライアントでこれを処理して終了 - 良い方法で動作します。再度、感謝します! – Bill
stdoutはストリームです。そのため、ファイルWriteStreamにpipe()することができます。そして、それはあなたが聞くことができる "終わり"のイベントがあることを意味します。 stdout.on( 'end'、fn)を実行するだけで、クライアントにジョブが完了したことを伝えることができます。 – juandopazo