首页 > 解决方案 > Multer 不会以任何方式将图像保存在磁盘上

问题描述

它根本不会将任何内容保存到destination我指定的文件夹中。

我试过{storage:storage}而不是,{dest: 'storage/'}但它也没有奏效。图像数据实际上是在其控制台记录时发送到服务器的。并且desti 指定是默认创建的,但保持为空。

const express = require('express');
const app = express();
const multer = require('multer');
    let storage = multer.diskStorage({
        destination: '/public/my-uploads',
          filename: function (req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now())
          }
    });

const upload = multer({dest:'storage/'}).single('file');


app.post('/upload', upload, (req , res) => {
  console.log(req.files) // this does log the uploaded image data.
})


***** EDIT ******

HTML

        <form  onSubmit={this.upload} enctype='multipart/form-data'>
          <input type='file' name='image' />
          <input type='submit' value='upload' />
        </form>

JS

  upload(e){
    e.preventDefault();
    const file = e.target[0].files[0];
    console.log(file)
    const fm = new FormData();

    fm.append('file', file);
    console.log(fm)
    axios.post('/upload', fm);
  }

POSTMAN

在此处输入图像描述

标签: node.jsexpressmulter

解决方案


似乎您没有使用存储变量并使用目标键的函数,如文档中所述,您还需要在名为的输入字段中传递文件,field否则 multer 无法存储文件,在与代码相同的级别:

const http = require('http')
const port = 3000
const express = require('express');
const app = express();
const multer = require('multer');
const server = http.createServer(app)

let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './storage')
    },
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now())
    }
});

const upload = multer({ storage }).single('file');


app.post('/upload', upload, (req, res) => {
    console.log(req.files) // this does log the uploaded image data.
})

// bind the server on port
server.listen(port, (err) => {
    if (err) {
        return console.log('something bad happened', err)
    }
    console.log(`server is listening on ${port}`)
})

在此处输入图像描述


推荐阅读