javascript - Nodejs with multer 不通过postman工具上传文件

标签 javascript node.js file-upload multer

我只想使用 multer 在 nodejs 中上传文件。我正在使用 postman 检查文件是否正在上传。每次当我尝试通过 postman 上传文件时,它都会显示错误。下面是我到目前为止所做的代码。

我的express.js 文件如下所示

/* ===================
   Import Node Modules
=================== */
const express = require('express');
const app = express();
const router = express.Router();

const mongoose = require('mongoose');
const config = require('./database');
const path  = require('path');
const appRoot  = require('app-root-path') ;

const event = require('./routes/event.router');
const multer = require('multer');

const bodyParser = require('body-parser');
const cors = require('cors');


const port = process.env.PORT || 8080; // Allows heroku to set port

mongoose.Promise = global.Promise;

process.env.NODE_ENV = 'devlopment';

// Database Connection
mongoose.connect(config.uri, {
  useMongoClient: true,
}, (err) => {
  // Check if database was able to connect
  if (err) {
    console.log('Could NOT connect to database: ', err); // Return error message
  } else {
    console.log('Connected to ' + config.db); // Return success message
  }
});


app.use(cors());

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(express.static(path.join(appRoot.path, 'dist')));
app.use('/event', event);

// Serve only the static files form the dist directory
app.get('*', (req, res) => {
    res.sendFile(path.join(appRoot.path, 'dist/index.html'));
  });

// Start Server: Listen on port 8080
app.listen(port, () => {
  console.log('Listening on port ' + port + ' in ' + process.env.NODE_ENV + ' mode');
});

event.router.js 看起来像这样

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');

const Event = require('../../model/event.model');
var multer  = require('multer');
var upload  = multer({ dest: './public/uploads/img/',fileFilter:function(req,file,cb){
  var ext = file.originalname.split('.').pop();
  cb(null, file.fieldname + '-' + Date.now() + '.' + ext);
    }
}).single('eventimage');

[![router.post('/', function(req, res, next)  {
  upload(req, res, function(err) {
    console.log('file', req.file);
  });

  if( !req.file ) {
    res.json({ success : false, message: 'You must provide event image!' });
  }
  else {
    res.json({ success : true, message: req.file.eventimage });
  }
 });

这是 postman 的屏幕截图

enter image description here

最佳答案

event.router.js

var express = require('express');
var multer = require('multer');
var route = express.Router();

var storage = multer.diskStorage({
destination: function (req, file, cb) {
 cb(null, 'public/uploads/')
},

 filename: function (req, file, cb) {
 console.log(file);
 let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
// cb(null, file.fieldname + '-' + Date.now() + '.' + extension);
 cb(null, file.originalname + '-' + Date.now() + '.' + extension);
}
})

var upload = multer({ storage: storage }).single('avatar');

route.post('/', function (req, res) {
upload(req,res, function(err) {
if (err) {
  res.send('error uploading file');
 }
 res.json({
  success : true,
  message : 'File uploaded!',
  file : req.file
  });

  })
 });

 module.exports = route;

index.route.js

var fileUpload = require('../routes/fileUpload');

var express   =   require('express');

var route = express.Router();

route.use('/upload', fileUpload);

module.exports = route;

现在将此index.route.js包含在您的index.js文件/app.js文件中,无论您保留什么名称。

不要忘记安装所有依赖项。

上传图片时,请参阅 .single() 中给出的名称,在我的例子中,我写了头像。

请参阅附件,了解如何浏览文件以及标题中的设置内容。

body when uploading image

header when uploading image

关于javascript - Nodejs with multer 不通过postman工具上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578407/

相关文章:

php - 使用 Varien_File_Uploader 上传多个文件

javascript - 保存上传到 asp 的文件时可以阻止 window.onbeforeunload :fileupload

php - 如何使用 PHP 接收通过 POST 请求提交的图像(文件)

javascript - 为什么服务端渲染内容被vue取代

javascript - 如何防止javascript div弹出窗口跳回到页面顶部?

JavaScript .startsWith() 函数在 IE 中不起作用,在 angularjs 项目中

javascript - 在 node.js express 中删除请求

node.js - 这段代码是异步执行的吗?

javascript - 使用 JXA 移动创建的文件

node.js - 通过Docker运行简单的Node.js时无法找到HelloWorld.js