【问题标题】:Express Multer file upload req.body and req.file undefinedExpress Multer 文件上传 req.body 和 req.file 未定义
【发布时间】:2016-02-10 14:42:21
【问题描述】:

我正在尝试使用 multer 上传文件,但没有请求正文或文件。有谁知道我做错了什么?

这是html

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="file-uploader"/>
  <input type="submit"/>
</form>

这是我的 js

const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
// other stuff
app.post('/upload', upload.single('file-uploader'), (req, res, next) => {
  console.log(req.file);
  console.log(req.body);
  res.send ({'asdf': 'sadf'});
});

【问题讨论】:

  • 你也加入了 Express 吗?
  • 是的,我有,我会编辑问题以包含它
  • 什么版本的nodejs?
  • 我正在运行节点 4.2.4
  • Multer 有错误处理,你试过用吗,我相信文档中解释了你会怎么做?

标签: javascript node.js express multer


【解决方案1】:

在 Express 4 中,req.files 默认不再在 req 对象上可用。 这是我的强大解决方案:

前端: 标记:

<input type="file" id="file"/>
<button id="send-file">Send</button>

JS:

    //send file
var send_file = $("#send-file");
send_file.on("click", function(e) {
    //file
    var file = $("#file")[0].files[0];
    //formdata
    var fd = new FormData();
    fd.append("file", file, "file_name");
    //send file
    $.ajax({
            url: '/upload',
            data: fd,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST'
        })
        .done(function(data) {
            console.log(data);
            console.log("Upload successfully");
        });
});
return false;});

后端:

安装强大:npm install formidable --save

最后一步:

var express = require('express');
var app = express();
var path = require('path');
var fs = require('fs');
var formidable = require('formidable');


     app.post('/upload', function(req, res) {


    // create an incoming form object
    var form = new formidable.IncomingForm();

    // specify that we want to allow the user to upload multiple files in a single request
    form.multiples = true;

    // store all uploads in the /uploads directory
    form.uploadDir = path.join(__dirname, './uploads');

    // every time a file has been uploaded successfully,
    // rename it to it's orignal name
    form.on('file', function(field, file) {
        fs.rename(file.path, path.join(form.uploadDir, file.name));
    });

    // log any errors that occur
    form.on('error', function(err) {
        console.log('An error has occured: \n' + err);
    });

    // once all the files have been uploaded, send a response to the client
    form.on('end', function() {
        console.log(Date.now())
        res.end('success');
    });

    // parse the incoming request containing the form data
    form.parse(req);

});

【讨论】:

  • 我浪费了 3 天时间让 multer 去工作。有没有办法让 multer 与 express 合作?我正在发送 req.body 中的文件!
  • :( 直到现在仍然找不到解决方案 multer 发生了什么 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2021-08-21
  • 1970-01-01
  • 2020-12-17
  • 2018-08-06
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多