Multer 文件缓冲区丢失

bla*_*one 4 node.js multer

从以下返回的 req.file 属性不包含缓冲区属性(https://www.npmjs.com/package/multer)。因此,当我尝试访问 req.file.buffer 时,它返回未定义。有人可以帮忙解释一下吗。`

const multer = require('multer')
const uploadtest = multer({
    dest: 'avatar'
})

router.post('/uploadtest', uploadtest.single('upload'), (req, res)=>{
    console.log(req.file)
    req.user.avatar = req.file.buffer
    await req.user.save()
    
    res.send()
    }, (error, req, res, next)=>{ 
        res.status(400).send({error: error.message})
    }
)
Run Code Online (Sandbox Code Playgroud)

` console.log(req.file) 的输出是:

{
  fieldname: 'upload',
  originalname: 'sample-doc-file.doc',
  encoding: '7bit',
  mimetype: 'application/msword',
  destination: 'avatar',
  filename: 'e488d6205717d45f397782b79d45fd8e',
  path: 'avatar\\e488d6205717d45f397782b79d45fd8e',
  size: 22528
}
Run Code Online (Sandbox Code Playgroud)

小智 21

这是预期的,因为您正在使用 DiskStorage - 代码multer使用“dest”选项进行初始化,因此它将在本地保存文件。看一下 multer README - API 文档在“Note”列中说buffer仅适用于 MemoryStorage。

因此,您必须决定 - 是否希望将文件保存到文件系统(并获取路径),或完全加载到内存中(并获取缓冲区)?在后一种情况下,自述文件包含一个名为“MemoryStorage”的部分,演示了如何配置 multer:

const storage = multer.memoryStorage()
const upload = multer({ storage: storage })
Run Code Online (Sandbox Code Playgroud)