无法使用multer将名称更改为上传的文件

时间:2018-05-22 06:14:42

标签: javascript node.js express multer

我正在尝试使用multer更改上传到服务器的图像名称,这会为文件提供一个随机名称。 我使用multer.diskStorage方法来执行此操作,如文档中所述,但它一直使用随机名称保存文件

代码:

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null,'./uploads/')
    },
    fileName: (req,file,cb) => {
        cb(null, file.originalname)
    }
})
const upload = multer({storage: storage})


router.post('/', upload.single('carImage') ,(req, res) => {

    res.send(req.file);
}

回应:

{ 
  fieldname: 'carImage',
  originalname: 'testOCR8.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: './uploads/',
  filename: '229f70c20e5550dbe638db49791ef17d',
  path: 'uploads/229f70c20e5550dbe638db49791ef17d',
  size: 1712380 
}

2 个答案:

答案 0 :(得分:1)

  

使用multer上传到服务器,multer为文件提供随机名称

你打错了。它是filename而不是fileName。这是the docs的标准行为。

  

filename用于确定文件夹中应该命名的文件。如果没有给出filename,则每个文件将被赋予一个不包含任何文件扩展名的随机名称。

所以,你的代码应该是

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null,'./uploads/')
    },
    filename: (req,file,cb) => { // notice the change 'filename'
        cb(null, file.originalname)
    }
});
const upload = multer({storage: storage});

答案 1 :(得分:0)

尝试使用StorageMulter的其他方法。请尝试以下方法 -

var StorageMulter = multer.diskStorage({
   destination: function(req, file, callback) {
      callback(null, "./temp");
   },
   filename: function(req, file, callback) {
      var uploadFileName = "x.jpg"; //Manipulate this variable accordingly
      callback(null, uploadFileName);
   }
});

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

app.post("/api/uploaddocument", function(req, res) {
   upload(req, res, function(err) {
      if (err) {
         return res.end("Something went wrong!"+ err);
      }
   });
});