javascript - Node Busboy 中止上传

标签 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);
});

最佳答案

好的,所以我遇到了同样的问题,我用 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);

关于javascript - Node Busboy 中止上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465882/

相关文章:

javascript - Node.js 对象函数 Number() { [native code] } 没有方法 'isInteger'

javascript - 获取 NodeJS 服务器监听的端口号

javascript - 下拉按钮未自定义

javascript - Jquery Fade 过渡看起来不正确

javascript - Javascript 中形状绕其中心旋转

rest - 使用nodejs获取cookie

node.js - 如何为IE7编译dust js服务器端渲染

node.js - Node : Bootstrap's JavaScript requires jQuery

mongodb - Node + Mongoose : Get last inserted ID?

javascript - 当前 URL 和链接匹配 - 带 div 类检查