在 Express 路由器中使用 multer 进行文件上传

Posted

技术标签:

【中文标题】在 Express 路由器中使用 multer 进行文件上传【英文标题】:Use multer for File-Uploads inside a Express Router 【发布时间】:2016-03-19 03:48:08 【问题描述】:

我得到了一个使用 node.js 和 Express 构建的工作 REST-API。

现在我需要一个文件上传端点,它接受上传的文件并处理它们。

我正在使用 Express 路由器和一些身份验证中间件。

server.js(摘录)

var router = express.Router()
app.use("/api", router)

[...]
router.use(function(req, res, next) 
    //Authentification middleware
    [...]
    next()
)

router.route("/upload")
     .post(function(req, res)
        //upload logic
     )

如何使用 multer 将上传的文件作为 req.file (左右)提供,但仅限于 /api/upload对于经过身份验证的用户?

【问题讨论】:

【参考方案1】:

好的,我知道了。

我可以使用

var multer = require("multer")
var upload = multer( dest: "some/path" )

[...]

router.route("/upload")
    /* replace foo-bar with your form field-name */
    .post(upload.single("foo-bar"), function(req, res)
       [...]
    )

【讨论】:

【参考方案2】:

对我来说,它也有效。

var multer = require("multer")
var upload = multer( dest: "path" )

router.post("/upload", upload.single("foo-bar"), function(req, res) 
  ...

【讨论】:

我花了很多时间试图完成这项工作。 var uploadMulter = multer( dest: directory ); router.post('/upload', uploadMulter.single("html_input_element_name"), function(req,res, next) ... 。 Multer repo In an average web app, only dest might be required, 中有一行。不要相信那条线...您还需要.single(fieldname) 电话...非常感谢...【参考方案3】:

在我的情况下,我尝试了所有方法,但它不起作用,但我找到了解决方案

app.js

const multer  = require('multer');
const storage =  
    dest:  'UPLOAD/PATH/'

const upload = multer(storage);
app.post('/myupload', upload.single('FILE_NAME'), (req,res)=>
  res.send('Upload');
);

我用 express.Router() 尝试了很多次,但它不起作用,这就是我在 app.js 中编写代码并重定向到另一个文件的原因。

【讨论】:

以上是关于在 Express 路由器中使用 multer 进行文件上传的主要内容,如果未能解决你的问题,请参考以下文章

使用 multer 和 express 上传图片

在控制器内使用Express和Multer解析请求

使用 Multer 将带有 fetch 的图像上传到 Express

在 React to Express multer 中使用 Antd 上传裁剪的图像

如何使用 javascript fetch api 和 express multer 上传图像

使用 Multer 重命名上传的文件不起作用 (Express.js)