缺少 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
从下面返回的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