Использование multer с nodejs - PullRequest
       10

Использование multer с nodejs

0 голосов
/ 17 февраля 2020

Я пытаюсь загрузить файл со своей страницы на сервер узла.

Я вижу, что данные формы поступают в маршрутизатор на сервере.

Но файл не сохраняется в папке загрузки.

Что я делаю не так?

// устройство маршрутизатора

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
}

// приложение. 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>

1 Ответ

0 голосов
/ 17 февраля 2020

Согласно странице github мультера, если вы не создали каталог для загрузки, это может go что-то не так.
Если это так, то создание каталога самостоятельно или передача строкового значения в свойство назначения решение для вас.

https://github.com/expressjs/multer

Примечание. Вы несете ответственность за создание каталога при предоставлении пункта назначения в качестве функции. При передаче строки multer будет следить за тем, чтобы каталог был создан для вас.

...