当前位置: 首页 > 知识库问答 >
问题:

Multer-req.file始终未定义

齐高寒
2023-03-14

我已经看了很多这个问题的答案,但我还没有找到一个可行的解决方案。我正在尝试制作一个Web应用程序,您可以使用Express和multer上传文件,我有一个问题,没有文件正在上传,req.file总是未定义。

下面是我的代码

'use strict';

var express = require('express');
var path    = require('path');
var multer  = require('multer')
var upload  = multer({ dest: 'uploads/' })

var app = express();
require('dotenv').load();

app.use(express.static(path.join(__dirname, 'main')));

app.post('/upload', upload.single('upl'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
  console.log(req.file);
  res.status(204).end();
})

var port = process.env.PORT || 8080;
app.listen(port,  function () {
    console.log('Node.js listening on port ' + port + '...');
});

表格

    <form class="uploadForm" action="/upload" method="post" enctype="multipart/formdata">
        <label class="control-label">Select File</label>
        <input name="upl" id="input-1" type="file" class="file">
        <input type="submit" value="submit" />
    </form>

非常感谢帮助,这快把我逼疯了。

共有3个答案

燕智
2023-03-14

我把MY(有很多我想象的,肯定更好)的解决方案来帮助很多像我这样的人,因为我已经搜索了一整天;-(

//JS file on node side

var express = require('express');
var fileUpload = require('express-fileupload');
var fs = require("fs");
var app = express();
console.log('étape 0');
app.use(express.static('mesStatic'));
app.use(fileUpload());
console.log('étape 1');
app.get('/indexFileUpload.htm', function (req, res) {
   res.sendFile( __dirname + "/" + "indexFileUpload.htm" );
})
console.log('étape 2');
app.post('/file_upload', function (req, res) {

   console.log('étape 3');
   console.log('req.files:' , req.files);
   if (!req.files) {
       res.send('No files to upload.');
       return;
   }

   console.log('req.files.file.data:' , req.files.file.data);
   var bufDataFile = new Buffer(req.files.file.data, "utf-8");
   console.log('étape 3.1');
   console.log('__dirname : ' + __dirname);
   fs.writeFile(__dirname + '/file_upload/output.txt', bufDataFile,  function(err) {
      if (err) {
         return console.error(err);
      }
      else {
         console.log("Data written successfully !");
      }      
      console.log('étape 4');
      res.end('Fin OK !!!');  
   })
})
var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port);
})
孟安民
2023-03-14

您的enctype有点不正确,应该是multipart/form-data而不是multipart/formdata

晋骏喆
2023-03-14

如果是邮递员,请尝试以下操作:

  1. 关闭API的邮递员选项卡
  2. 再次打开新标签
  3. 重建API请求,然后发送。

这可能会解决问题。每次重新启动服务器时,都需要执行上述步骤以再次调用API。multer发送回一些名为connect的Cookie的原因。在进一步通信中可能需要的客户端sid。使用旧Cookie不会上载文件。

 类似资料:
  • 除了图像文件之外,所有的数据都被发送到后端。我一直得到req.file是未定义的,这阻止了数据存储在数据库中。 在前端,我有一个表单,收集来自用户的输入,包括一张照片和一个文本描述。这是在一个组件文件中。

  • 我试图使用multer在express服务器中上载图像,但是,使用postman上载图像时,使用下面的路由会给出json消息(即正确到达了路由),但是给出。为什么?相关的文件结构如下所示,以确保我正确引用了目的地: UploadRoutes.js

  • 我收到此意外错误nodejs(Express)。每当我需要控制台时。文件或请求。文件,未定义为控制台 三个文件如下: 用于注册 处理所有multer配置 所有文件的父级

  • 我正在尝试使用Express 4.0上传单个图像文件文本字段 1) 穆特的要求。车身要求。如果登录控制台,则未定义文件对象 2)res.json(测试时也res.send)获取错误-TypeError:res.json不是Object.handle的函数) multer使用力矩配置如下。js表示日期,几乎是multer Github文档中的一行对一行: 这是客户端表单 我做错了什么?

  • 问题内容: 我正在使用AngularJS 1.4.0和服务。以下代码将始终打印出一个空对象: 我试过了: 使用AngulerJS 1.3.15,并且在刷新浏览器时cookie不会持久存在(但至少会创建cookie)。 添加有效期。 确保在我的浏览器(Chrome)中启用了Cookie。 尝试使用普通的旧JS,但仍然无法正常工作。 我在任何地方都找不到类似的问题。 谢谢。 问题答案: 对于偶然发现此

  • 我正在创建一个应用程序,使用Node、Express、ejs和multer上传图像。每次我提交表格时。文件未定义。我花了一整天的时间来排除故障,但却不知道自己做错了什么。 超文本标记语言 app.js