Multer 中未定义 file.size

问题描述 投票:0回答:1

我使用 multer 来处理多文件上传,以及中间件“文件名”,如下所示:

  filename: async (req, file, cb) => {
    console.log(Object.keys(file));
    ({ rows } = await db.query(`
    INSERT INTO public.files(
      uuid,
      nom,
      type,
      size
    )
    VALUES
    ($1, $2, $3, $4)
    RETURNING *`, [
      req.uuid,
      file.originalname,
      file.mimetype,
      file.size,
      // +req.headers["content-length"],
    ]));
    cb(null, uuid);
  },

问题在于

file.size
仍未定义。在将文件发送到 API 之前,我会控制大小是否存在。当我检查哪些属性可用时(参见
console.log
),我只有
'fieldname', 'originalname', 'encoding', 'mimetype'

如果我使用

+req.headers["content-length"]
,它会考虑所有请求(所有文件)的大小,而不仅仅是当前文件。

为什么我看不到文件大小?这是不可能的还是我应该编辑一些我在文档中没有找到的设置?

node.js file-upload multer
1个回答
0
投票

感谢@traynor,这就是我所做的:

上传后我添加了一个中间件:

router.post('/',
  upload.array('files'),
  handleFiles,
  ...

我简化了上传:

const storage = multer.diskStorage({
  destination: async (req, file, cb) => {
    let folder = config.get('api.files');
    req.uuid = uuid.v4();    
    folder += `/${req.uuid.charAt(0)}/${req.uuid.charAt(1)}/`;
    await fsPromises.mkdir(folder, { recursive: true });
    cb(null, folder);
  },
  filename: async (req, file, cb) => {
    cb(null, req.uuid);
  },
});

const upload = multer({ storage });

我用新的中间件处理逻辑:

const handleFiles = async (req, res, next) => {
  // my logic here, with req.files having f.size for each file
  // and f.originalname anf f.filename

  next();
}
© www.soinside.com 2019 - 2024. All rights reserved.