imn*_*mns 11 javascript node.js express busboy
我正在使用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);
});
Run Code Online (Sandbox Code Playgroud)
好的,所以我有同样的问题,我用它解决了 file.resume();
var fstream;
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
// Validate file mimetype
if(mimetype != 'image/png'){
file.resume();
return res.json({
success: false,
message: 'Invalid file format'
});
}
// Upload
fstream = fs.createWriteStream(__dirname + '/tmp/' + timestamp + filename);
file.pipe(fstream);
fstream.on('close', function () {
return res.json({
success: true
});
});
});
req.pipe(req.busboy);
Run Code Online (Sandbox Code Playgroud)
我会尝试这样的事情:
var self = this;
var busboy = new Busboy({
headers: self.req.headers,
limits: {
files: 1,
fileSize: 500000
}
});
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
file.fileRead = [];
file.on('limit', function() {
//Clear variables
});
file.on('data', function(chunk) {
file.fileRead.push(chunk);
});
file.on('end', function() {
var data = Buffer.concat(file.fileRead, size);
// ... upload to S3
});
self.req.pipe(busboy);
});
Run Code Online (Sandbox Code Playgroud)
基本上我在 Busboy 的配置中添加了一个新的限制:fileSize: 500 * 1024
我开始监听限制事件:
file.on('limit', function() {
//Clear vars
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |