busboyを使用して、アップロードしたファイルをバッファーに書き込み、そのファイルに対していくつかの検証 (幅、高さ、ファイルサイズ) を実行しています。アップロードに何か問題があることがわかったら、ストリームを中止/停止する方法を一生理解できません。
たとえば、許可したい最大ファイルサイズが 500kb の場合、アップロード中のバッファのサイズを追跡し、サイズが 500kb を超える場合は中止します。
これが私のコードの簡略版です。
var self = this;
var busboy = new Busboy({
headers: self.req.headers,
limits: {
files: 1
}
});
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
file.fileRead = [];
var size = 0;
file.on('data', function(chunk) {
size += chunk.length;
/* DO VALIDATION HERE */
if( size > 500000) {
/*** ABORT HERE ***/
}
file.fileRead.push(chunk);
});
file.on('end', function() {
var data = Buffer.concat(file.fileRead, size);
// ... upload to S3
});
self.req.pipe(busboy);
});