我遇到一个问题,当使用multer.memoryStorage
时,它返回的req.file
未定义。我可以成功使用multer.diskStorage
并将文件保存在后端目录中。因此,我确实知道我的前端正在按预期方式发送formData
。
这是我的客户端代码,负责发送formData
:
filesUpload = () => {
const data = new FormData();
const { files } = this.state;
const filesKey = Object.keys(files);
filesKey.forEach(key => {
data.append('file', files[key]);
});
const axiosConfig = {
headers: { 'Content-Type': 'multipart/form-data' }
};
axios.post('/v1/upload/files', axiosConfig, data, {}).then(res => {
console.log(res.statusText);
});
};
这是Express服务器端代码。调用'/v1/upload/files'
时会命中此控制器:
//Multer Engine
const storage = multer.memoryStorage({
destination: (req, file, callback) => {
callback(null, '');
}
});
const multipleUpload = multer({ storage: storage }).array('file');
exports.s3Upload = (req, res) => {
multipleUpload(req, res, err => {
if (err instanceof multer.MulterError) {
console.log(err);
}
res.send(req.file) //req.file is always undefined
});
};
我很困惑,因为如上所述,multer.diskStorage
对我有用。我想我缺少使用memoryStorage
的重要内容。我最终将使用multer
处理的文件发送到AWS S3存储桶,如果这有区别的话。
答案 0 :(得分:1)
哇,我只想说。
const axiosConfig = {
headers: { 'Content-Type': 'multipart/form-data' }
};
axios.post('/v1/upload/files', data, axiosConfig).then(res => {
console.log(res.statusText);
});
我有一个空对象被传递到原始代码中的Axios参数中。......
axios.post('/v1/upload/files', axiosConfig, data, {EMPTY}).then(res => {
console.log(res.statusText);
});