我正在使用MulterV1.3.0和ExpressV4.15.4。
我已经使用了文件化限制,如下所示
multer({
storage: storage,
limits: {fileSize: 1*1000*50, files:1},
fileFilter: function (req, file, cb) {
if (_.indexOf(['image/jpeg', 'image/png'], file.mimetype) == -1)
cb(null, false);
else
cb(null, true)
}
});
>
在这种情况下,我不认为限制起作用。导致未获得任何LIMIT_FILE_SIZE错误。
如果删除fileFilter,则会出现LIMIT_FILE_SIZE错误。
但在这两种情况下,首先要上传整个文件&然后检查fileSize。
上传一个1GB的文件,然后检查它的1MB或不是,这一点都不好。所以我想知道如果有任何方法可以停止在文件大小限制超过中间上传。我不想依赖内容长度。
通过查看Multer
和Busboy
源,它似乎将数据大小计算为一个运行总数,并在达到FileSize
时立即停止读取流。请参阅此处的代码:
https://github.com/mscdex/busboy/blob/8f6752507491c0c9b01198fca626a9fe6f578092/lib/types/multipart.js#l216
因此,虽然1GB可能被上传,但它不应该保存在任何地方。
如果你想停止继续上传,我想你必须关闭套接字,虽然我没有试验过这个自己。我不知道在请求仍试图上传数据的时候有什么方法可以干净利落地响应。
相关:
是或否:服务器是否可以发送HTTP响应,同时仍然从相关的HTTP请求上传文件?