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"); });