Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在使用busboy时,如何强制执行文件上载大小限制?_Node.js_Amazon S3_Busboy - Fatal编程技术网

Node.js 在使用busboy时,如何强制执行文件上载大小限制?

Node.js 在使用busboy时,如何强制执行文件上载大小限制?,node.js,amazon-s3,busboy,Node.js,Amazon S3,Busboy,不想将上传的文件存储在磁盘或内存中作为中间步骤,因此决定使用busboy处理文件上传到AWS S3。这是我的密码: function handleUpload(req, res, bucket, key) { let bb = new Busboy({ headers: req.headers, limits: { fileSize: 10 * 1024 * 1024 , files: 1 } }); const uploads = []; bb.on('file',

不想将上传的文件存储在磁盘或内存中作为中间步骤,因此决定使用
busboy
处理文件上传到AWS S3。这是我的密码:

function handleUpload(req, res, bucket, key) {
    let bb = new Busboy({ headers: req.headers, limits: { fileSize: 10  * 1024 * 1024 , files: 1 } });
    const uploads = [];
    bb.on('file', (fieldname, stream, filename, encoding, mimeType) => {
        console.log(`Uploaded fieldname: ${fieldname}; filename: ${filename}, mimeType: ${mimeType}`);
        const params = { Bucket: bucket, Key: key, Body: stream, ContentType: mimeType };
        uploads.push({ filename, result: S3.svc.upload(params).promise().then(data => data).catch(err => err) });
    });
    bb.on('finish', async () => {
        const results = await Promise.all(uploads.map(async (upload) => ({ ...upload, result: await upload.result })));
        // handle success/failure
    });
    req.pipe(bb);
}
这很好,但问题是,
busboy
不是通过抛出错误来强制执行大小限制,而是通过无声地截断上传的文件

如果文件太大并在API中返回错误,如何短路/中止上载

根据我的初衷,如果可能的话,我希望避免存储在磁盘或内存中。

根据,在巴士男孩特别活动中

如果达到了配置的文件大小限制,则流将同时具有一个被截断的布尔属性(最好在流的末尾进行检查),并在发生这种情况时发出“limit”事件通知您

所以你可以在你的案子中使用

stream.on('limit', function(data) {                                               
 console.log("LIMIT"); });