NodeJS Multer不会以任何方式将图像保存在磁盘上

chy5wohz  于 2023-05-28  发布在  Node.js
关注(0)|答案(6)|浏览(230)

它不会将任何内容保存到我指定的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

gzszwxb4

gzszwxb41#

尝试捕获我自己调用中间件的错误:

var upload = multer().single('avatar')
app.post('/upload', function (req, res) {
  upload(req, res, function (err) {
    if (err) {
      // An error occurred when uploading
      return
    }

    // Everything went fine
  })
})

另外,将存储更改为:

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

iyfamqjs2#

已经有一段时间了,问题是我根本没有使用multer中间件,所以处理图像的回调代码从未执行过。当时我不太了解快递是怎么运作的。

polkgigr

polkgigr3#

看起来你没有使用存储变量,而是使用了一个目标键的函数,正如文档中所写的那样,你还需要在名为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}`)
})

1dkrff03

1dkrff034#

...single('file')中的“single”的名称必须与输入(包含文件)<input type="file" name='image' />中的名称匹配,但在您的示例中却不是这样。
将multiter-part更改为...single('image')-与输入name='image'相同

idv4meu8

idv4meu85#

尝试将此文件存储用于在本地保存图像

const fileStorage = multer.diskStorage({
      destination: (req, file, cb) => {
        cb(null, "images");
      },
      filename: (req, file, cb) => {
        cb(
          null,
          new Date().toISOString().replace(/:/g, "-") + "-" + file.originalname
        );
      },
    });
bgibtngc

bgibtngc6#

您需要先创建文件夹/public/my-uploads,然后才能保存文件。我现在正在学习nodejs,并面临这个问题。

相关问题