首页 > 解决方案 > 在 nodejs 中使用 multer

问题描述

我正在尝试将文件从我的页面上传到节点服务器。

我可以看到表单数据正在到达服务器上的路由器。

但是没有文件保存在上传文件夹中。

我究竟做错了什么?

//路由器单元

const express = require('express');
const router = express.Router();
const multer = require('multer');
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        console.log('chegei')
        cb(null, "uploads/")
    },
    filename: (req, file, cb) => {
        console.log('chegei2')
        cb(null, Date.now() + "-" + file.ogirinalname)
    },
});

module.exports = function (page) {
     router.post('/SendMsgBase64', async (req, res) => {
        var upload = multer({ storage: storage }).single('userFile');
        upload(req, res, function (err) {
            if (err) {
                console.log(err);
                return res.send({ "data": "Error uploading file." });
            }
            return res.send({ "data": "File is uploaded" });
        });  
  return router
}

//app.js 单元

const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const WARoutes = require('../routes/WARoutes');
const path = require('path');
const bodyParser = require('body-parser');


app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res) => {
    res.sendFile('/index.html');
})
app.use('/whats', WARoutes(this.page));

//html

  <form id="uploadForm">
      <input type="file" name="userFile" />
      <input type="button" value="Upload Image" onclick="uploadFile();">
      <span id="status"></span>
    </form>

    <script>
      uploadFile = () => {
        var formData = new FormData();
        debugger
        var logoImg = $('input[name="userFile"]').get(0).files[0];

        formData.append('logo', logoImg);
        var objArr = [];

        objArr.push({ "id": "123", "name": "luiz" });

        //JSON obj
        formData.append('objArr', JSON.stringify(objArr));

        $.ajax({
          url: "/whats/SendMsgBase64",
          type: "POST",
          processData: false,
          contentType: "application/x-www-form-urlencoded",
          data: formData,
          complete: function (data) {
            alert("success");
          }
        })
      };    
    </script>

标签: htmlnode.jsuploadmulter

解决方案


根据multer的github页面,如果你没有创建uploads目录,可能会出错。
如果是这种情况,您自己创建目录或将字符串值传递给目标属性是您的解决方案。

https://github.com/expressjs/multer

注意:在将目标提供为函数时,您有责任创建目录。传递字符串时,multer 将确保为您创建目录。


推荐阅读