如何使用 Multer 提交带有可选文件提交的表单?
Posted
技术标签:
【中文标题】如何使用 Multer 提交带有可选文件提交的表单?【英文标题】:How to submit form with Multer with optional file submission? 【发布时间】:2018-01-28 06:33:58 【问题描述】:我正在使用 multer 在我的 express 应用中提交表单。问题是表单具有可选的图像提交选项。这意味着用户可以根据需要添加照片,但他/她也可以提交不带图像的表单。图片提交没有问题。但是当没有图像时,multer没有提交表单,甚至没有其他字段。
const express = require('express');
const router = express.Router();
const Company = require('../controller/CompanyController');
const multer = require('multer');
const path = require('path');
let storage = multer.diskStorage(
destination: function (req, file, cb)
cb(null, './public/images/logos');
,
filename: function (req, file, cb)
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
);
let upload = multer( storage: storage ).any();
router.route('/companies').post(upload, Company.Create);
module.exports = router;
【问题讨论】:
不要使用.any()
尝试使用.fields([ name: 'avatar', maxCount: 0 ])
。我希望这能解决您的问题
问题出在我的控制器级别。手动修复了这个,multer跟它没有关系,我后来才发现的。顺便说一句,谢谢帮助。我用了.array('logo', 1)
,几乎是一样的东西,但支持多个文件,我以后会用到。
【参考方案1】:
一种解决方法是在提交完成后检查req.file
的值。如果您未在表单中提供文件,req.file
的值应为 undefined
。但是,如果您提交文件,它应该是object
。因此,您可以像这样编写一个简单的if
语句:
function Create()
if (req.file !== undefined)
// process image here
// process all other fields
希望对你有帮助!
【讨论】:
非常感谢您的回复。像魅力一样工作。虽然我使用了if(req.files[0])
,但我使用的是.array('logo', 1)
方法:)
带我弄清楚这里发生了什么。对于其他任何人,请在此答案的顶部添加“这不是 Multer 相关问题...”。以上是关于如何使用 Multer 提交带有可选文件提交的表单?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 React.js + Django Rest Framework 保存带有表单提交的 blob 文件
如何在节点中使用 multer 将图像上传到 cloudinary 并与其他数据一起表达