【问题标题】:How to submit form with Multer with optional file submission?如何使用 Multer 提交带有可选文件提交的表单?
【发布时间】: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),几乎是一样的东西,但支持多个文件,我以后会用到。

标签: javascript node.js forms express multer


【解决方案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 相关问题...”。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 2021-10-19
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多