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

can't change name to uploaded file using 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 
}

尝试使用 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);
      }
   });
});

im uploading to the server using multer which gives the file a random name

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

filename is used to determine what the file should be named inside the folder. If no filename is given, each file will be given a random name that doesn't include any file extension.

所以,您的代码应该是

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});