我正在尝试使用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
}
答案 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);
}
});
});