【发布时间】:2015-08-08 13:26:46
【问题描述】:
我正在使用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);
});
【问题讨论】:
-
您可以将文件大小限制为busyboy的参数-它只是
fileSize属性... -
如果我想验证文件的宽度和高度怎么办?然后我需要中止流,而不是指望
limit事件。 -
我在我接受的赏金中有一篇关于这个somewhere的帖子,但它没有使用busbuy。
-
@BenjaminGruenbaum 如果你把它挖出来,我很想看看。发布答案,如果这是我需要的,我会接受。
-
它对标题进行检查,但可以很容易地应用到你想要它做任何事情stackoverflow.com/a/16349882/1348195
标签: javascript node.js express busboy