ExpressJS Multer 文件权限

Ema*_*lib 0 javascript node.js express

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/'}));
Run Code Online (Sandbox Code Playgroud)

这是文件的开始。在启动服务器期间它总是显示以下消息

/usr/lib/node_modules/multer/node_modules/mkdirp/index.js:90 throw err0; ^ 错误:EACCES,在 Object.fs.mkdirSync (fs.js:654:18) at Function.sync (/usr/lib/node_modules/multer/node_modules/mkdirp/index.js:71: 13) 在新的 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对象处的 multer (/usr/lib/node_modules/multer/index.js:75:12) 处的新 Multer (/usr/lib/node_modules/multer/index.js:15:20)。(/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。加载(module.js:356:32)

如果有人可以帮助我防止这个问题,请告诉我。非常感谢。

ram*_*sri 7

multer 正在尝试在全局 node_modules 位置创建目标文件夹/new。更改到本地目的地的路径。尝试以下

app.use(multer({ dest: './new/'}));
Run Code Online (Sandbox Code Playgroud)

如果您在上述尝试中遇到错误

app.use(multer({ dest: __dirname +'/new/'}));
Run Code Online (Sandbox Code Playgroud)


Krz*_*pka 5

你有两个问题:

1) 您将全局目标路径设置为 multer。并且 multer 无权创建该路径(并且它是正确的)。我怀疑您想在项目中创建“新”目录,如果是,则将路径更改为“./new/”。当你解决这个问题时,我们就会遇到第二个问题。

2) Multer模块更改API。不起作用:

app.use(multer({ dest: './new/'}));
Run Code Online (Sandbox Code Playgroud)

除非您有旧版本的 multer(不要使用旧版本,它有安全问题)。检查文档页面以了解如何使用 multer: link。您可以查看我对类似问题的回答:链接。简而言之:

配置目标路径:

var upload = multer({ dest: './new' })
Run Code Online (Sandbox Code Playgroud)

然后在您要上传文件的每个路线中

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