express-fileupload使用fileSize限制时上传原始文件

时间:2019-11-24 04:36:21

标签: node.js express

我正在使用提到的fileuplaod中间件。我想设置一个中间件,该文件警告文件大小超出限制,但不想截断文件。

app.use(fileUpload({
    limits: { fileSize: 1 * 1024 * 1024 },
    createParentPath: true,
    safeFileNames: true,
    preserveExtension: 5,
    limitHandler: function (req, res, next) {
        Logger.warn("File size limit has been exceeded");
    },
    abortOnLimit: false,
    useTempFiles: true,
    tempFileDir: './temp/apiuploads'
}));

文件被截断。因此,无法打开上载的文件。当文件大小超过限制但不想截断文件时,我想记录该消息。请帮我解决。

1 个答案:

答案 0 :(得分:2)

不要为中间件添加文件限制选项,我也建议仅将中间件用于上传路由。

使用大小值上传后检查上传的文件大小。

如果大小超出限制,则记录消息。

示例:

app.use('/upload', fileUpload({
    createParentPath: true,
    safeFileNames: true,
    preserveExtension: 5,
    useTempFiles: true,
    tempFileDir: './temp/apiuploads'
}));

app.post('/upload', (req, res) => {
  if (!req.files || Object.keys(req.files).length === 0) {
    res.status(400).send('No files were uploaded.');
    return;
  }

  const uploads = Object.values(req.files).map((file) => {
    if (file.size > 1 * 1024 * 1024) {
      Logger.warn(`File ${file.name} size limit has been exceeded`);
    }
    const uploadPath = path.join(__dirname, 'uploads', file.name);
    return file.mv(uploadPath);
  });

  Promise.all(uploads)
    .then(() => res.send('Files uploaded to ' + path.join(__dirname, 'uploads')))
    .catch(err => res.status(500).send(err));
});