缺少 Multer 文件缓冲区

Multer file buffer missing

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

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

` 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
}

这是预料之中的,因为您使用的是 DiskStorage - 代码使用“dest”选项初始化 multer,因此它将在本地保存文件。查看 multer README - API 文档在“注意”列中说 buffer 仅适用于 MemoryStorage。

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

const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

我遇到了同样的问题,req.file.buffer 未定义。正如 Robert 所指出的,我正在为 multer 使用 dest 选项。这对我有用:

const multer = require('multer');
const upload = multer();

router.post('/', upload.single('image_file'), myController)

然后在 myController 上

var buffer = req.file.buffer;

要获得 await 的好处,您必须在 (req, res) => {}

之前写上 async