在Express Router中使用multer进行文件上传

19

我使用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并且对已授权的用户?

3个回答

23

好的,我明白了。

我可以使用

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){
       [...]
    })

8

对我也起作用了。

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

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

2
我花了很多时间来尝试让这个工作。var uploadMulter = multer({ dest: directory }); router.post('/upload', uploadMulter.single("html_input_element_name"), function(req,res, next) {...。在 Multer 存储库中有一行 在一个普通的 Web 应用程序中,只需要 dest 可能就足够了。不要相信这句话...你还需要 .single(fieldname) 调用...非常感谢... - zipzit

2

在我的情况下,我尝试了各种方法,但都没有奏效,但我找到了解决方案。

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 中编写代码并重定向到另一个文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接