1

您好,提前感谢您提供的任何帮助。我正在使用 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'

我运行 server.js 脚本,这就是我得到的错误。我相信这与权限有关,但我尝试过 chown 公用文件夹和 chmod ax,你们还有其他关于该怎么做的建议吗?仍然得到同样的错误。我的代码是 server.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);
4

1 回答 1

1

你有没有想过这个?我也收到了 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.  
})

希望这可以帮助。

于 2015-08-25T19:11:46.910 回答