【问题标题】:multer upload not workingmulter上传不起作用
【发布时间】:2018-04-13 08:29:11
【问题描述】:

我正在尝试使用 multer 使用文件上传功能。 我总是收到 404 错误,我该如何解决?

这是我的app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

var session = require('express-session');
var flash = require('connect-flash');
var mongoose = require('mongoose');

var multer = require('multer');

app.use(multer({
  dest: './uploads/'
}).single('singleInputFileName'));

这是我的router.js

router.post('/', function(req, res) {
   console.dir(req.files);
});

这是表格:

form(action='/' enctype='multipart/form-data')
 input(type='file' name='singleInputFileName')
 input(type='submit' value='Upload photo')

编辑:我已将此脚本添加到 app.js

app.post('/fileuploads', function(req, res) {
  upload(req, res, function(err) {
    console.log(req.body);
    console.log(req.files);
    if (err) {
      return res.end("Error uploading file.");
      console.log(err);
    }
    res.end("File is uploaded");
  });
});

【问题讨论】:

  • 请检查代码并告诉我它是否对您有帮助?如果它不起作用,我会尝试纠正它
  • 跟高速路由器有关。不知何故,它似​​乎不适用于路由器。如果代码直接用 app.js 编写,那么一切正常。

标签: javascript node.js express multer


【解决方案1】:

这是multer文件上传的sn-p,我已经用以下代码在邮递员上进行了测试,请查看并进行相应的更改。

app.js

// NodeJS Core dependencies
var express = require('express');
var app = express();
var router = express.Router();
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var createError = require('http-errors');
var session = require('express-session');
var flash = require('connect-flash');
var mongoose = require('mongoose');
// Router file in which routes implemented
var index = require("./routes/index")(app, router);
// Add routers in middleware
app.use("/", index);
// Listen application on 3000 Port
app.listen(3000, function () {
    console.log("application running on port 3000");
});

index.js

// NodeJS module dependencies
var multer = require('multer');
var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, `${process.cwd()}/uploads/`)
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now() + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1].toLowerCase())
    }
});
var upload = multer({ storage: storage });
// Export routes
module.exports = function (app, router) {
    router.post('/fileupload', upload.single('avatar'), (req, res, next) => {
        res.status(200).json({message: `File uploaded successfully on '${process.cwd()}/uploads/${req.file.filename}`});
    });
    return router;
}

包.json

{
  "name": "nodejs-multer",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "connect-flash": "0.1.1",
    "cookie-parser": "1.4.3",
    "express": "4.16.3",
    "express-session": "1.15.6",
    "mongoose": "5.0.14",
    "moongoose": "0.0.5",
    "morgan": "1.9.0",
    "multer": "1.3.0",
    "nodemon": "1.17.3"
  }
}

【讨论】:

  • 需要静态文件夹吗?
  • @ŞükSefHam 我已经用问题中描述的上传文件夹路径更新了我的代码。谢谢。
  • 我将把它放在“router.js”的什么地方?
  • 等待发布错误此代码正在运行 sn-p,我在我的应用程序中使用了相同的 sn-p,它需要解决您的 app.js 的错误,这是主要原因,当您说 404 时表示您调用的路径在您的路由器文件中不存在
  • 我该如何解决?
【解决方案2】:

我认为表单的操作不正确,试试 '/fileuploads'

form(action='/fileuploads' enctype='multipart/form-data')
input(type='file' name='singleInputFileName')
input(type='submit' value='Upload photo')

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 2016-04-11
    • 2015-03-09
    • 2021-10-17
    • 2019-09-30
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多