Multer, Node, EACCES error on C9.io



Hiya 提前感谢您提供的任何帮助。我正在使用 C9.io,node,express,multer,gridfs-stream。 我得到:

 /home/ubuntu/workspace/node_modules/multer/index.js:25
  mkdirp(dest, function(err) { if (err) throw err; });
 Error: EACCES, mkdir '/uploads'

我运行服务器.js脚本,这就是我得到的错误。 我相信这与权限有关,但我已经尝试了公共文件夹和 chmod ax,你们还有其他建议该怎么做? 仍然得到相同的错误。我拥有的代码是服务器.js

app.use('/uploads', express.static(__dirname + '/public/uploads'));
app.use(multer({dest: '/uploads/'}));
app.use(methodOverride());
app.get('/form',function (req,res){
   res.render('form'); 
});
app.get('/api/taxis', function(req,res){
    taxiModel.Taxi.find({}).exec(function(error,collection){
        res.send(collection);
        });
});
// app.get('user/:name', function(req,res){
//     taxiModel.Taxi.find({name:req.param.nmae},function(err,docs){
//       if(err)res.json(err);
//       else res.render();
//     }
// });
app.get('*', function (req,res){
   res.render('index'); 
});
app.post('/new',function(req,res){
    var dirname = require('path').dirname(__dirname);
     var filename = req.files.dnimgfront.name;
     var path = req.files.dnimgfront.path;
     var type = req.files.dnimgfront.mimetype;
     var gfs = Grid(conn.db);
     var read_stream =  fs.createReadStream(dirname + '/' + path);
     var writestream = gfs.createWriteStream({filename: filename});
     read_stream.pipe(writestream);
});


mongoose.connect('mongodb://jsrosas:12345@ds031721.mongolab.com:31721/taxis');
var conn=mongoose.connection;
conn.once('open', function(){
    console.log('connected to mongodb succesfully!');
});
app.listen(process.env.PORT, process.env.IP);

你有没有想通这一点?我也遇到了EAccess错误。

为了解决这个问题,我做了以下工作。

我必须确保包含path = require('path')也不确定您的问题与 Multer 版本相比有多旧,但我看起来在 1.0.3 版中您必须multer = require('multer')然后低于该版本upload = multer()这也是您坚持配置信息的地方。

你最终得到

var multer = require('multer'),
/*some config stuff for multer*/
    Limits = { fileSize: 10 * 1024 * 1024, files:1 };
/* specify one file so ppl can't flood the server with infinite file
  uploads or make it what you want but don't just leave it. Alternately 
  you can write the config stuff like the dest: value below. */
/*pass multer the configuration information and/or set config information*/
var upload = multer({dest: path.join(__dirname+'/uploads'),
                     limits: Limits
                    });

然后做 app.post 喜欢

app.post('/uploads', upload, function(req,res){
    // expose req.file to a variable or do some process by which you send it to your database.  
})

希望这有帮助。

最新更新