简体   繁体   中英

ExpressJS Multer File Persmission

var express = require('express');
var app = express();
var fs = require("fs");

var bodyParser = require('body-parser');
var multer  = require('multer');

app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({ dest: '/new/'}));

This is starting of file. It is always showing below message during startup the server

/usr/lib/node_modules/multer/node_modules/mkdirp/index.js:90 throw err0; ^ Error: EACCES, permission denied '/new' at Object.fs.mkdirSync (fs.js:654:18) at Function.sync (/usr/lib/node_modules/multer/node_modules/mkdirp/index.js:71:13) at new DiskStorage (/usr/lib/node_modules/multer/storage/disk.js:21:12) at module.exports (/usr/lib/node_modules/multer/storage/disk.js:65:10) at new Multer (/usr/lib/node_modules/multer/index.js:15:20) at multer (/usr/lib/node_modules/multer/index.js:75:12) at Object. (/var/www/node/server.js:10:9) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32)

Please let me if someone can help me to prevent this problem. Thank you so much.

multer is trying to create a destination folder /new in global node_modules location. Change your path to local destination. Try the following

app.use(multer({ dest: './new/'}));

if you are getting error with the above try

app.use(multer({ dest: __dirname +'/new/'}));

You have two isues:

1) You set global destination path to multer. And multer has not permission to create that path (and it is correct). I suspect you want to create 'new' directory in your project, if yes, then change your path to './new/'. When you fix this then we have second problem.

2) Multer module change API. It will not work:

app.use(multer({ dest: './new/'}));

unless you have an old version of multer (dont use old version it has security isues). Check docs page for how to use multer: link . You can check my answer to similar problem: link . In short:

configure destination path:

var upload = multer({ dest: './new' })

then in each route where you want to upload file

app.post('/profile', upload.single('fieldname'), function (req, res, next) {
//req.file has data of uploaded file
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM