How can I set uploaded file name?

吃可爱长大的小学妹 提交于 2019-12-23 17:17:47

问题


By using 'multer' , I made it to request image file like this.

And this file is stored at 'uploads' folder I set. my code is below:

var multer  = require('multer')
var upload = multer({dest:'./uploads/'});
//var upload = multer({ storage: storage });
var app = express();
app.use(app.router);
app.post('/upload', upload.single('puzzle'), function (req, res, next) {
    console.log(req.file);
});

But I want to set my file name like 'abc.png' not 'abc'

I read docs and what I found is that

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/uploads');
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now());
  }
});

var upload = multer({ storage: storage });

So my modified code is below:

var multer  = require('multer')
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/uploads');
  },
  filename: function (req, file, cb) {
    cb(file.filename+'.png', file);
  }
});

var upload = multer({ storage: storage });
var app = express();
app.use(app.router);
app.post('/upload', upload.single('puzzle'), function (req, res, next) {
    console.log(req.file);
});

But in this case, the error occurs and says 'Error: ENOENT, open '/uploads/puzzle-1449496743377' , not like the picture above...

How could I solve this?

I'm sure many newbie developers like me will have in trouble thanks to unkind docs...


回答1:


    var fs = require('fs');
var multer  = require('multer')
//var uploader = multer({dest:'./uploads/'});

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './uploads/')
  },
  filename: function (req, file, cb) {
    crypto.pseudoRandomBytes(16, function (err, raw) {
      cb(null, raw.toString('hex') + Date.now() + '.png');
    });
  }
});
var upload = multer({ storage: storage });
var app = express();
app.use(app.router);
app.post('/upload', upload.single('puzzle'), function (req, res, next) {
    console.log(req.file);
});

Solved, thank you all guys thank you




回答2:


I think your problem is in the definition of the destination dir. The starting '.' is missing. Try to use this code:

destination: function (req, file, cb) {
  cb(null, './uploads/');
},


来源:https://stackoverflow.com/questions/34135320/how-can-i-set-uploaded-file-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!