如何解决如何在 Multer 中更改文件原始名称
我正在尝试将文件上传到 Google Cloud Storage 存储桶和 MongoDB,这实际上是有效的,但更改文件名不是因为我不能,我已经在网上查找过,但看不到类似的代码我的,那么如何更改文件 originalname
向其添加 date.Now()
。
我的代码
const multer = Multer({
storage: Multer.memoryStorage(),limits: {
fileSize: 5 * 1024 * 1024,// no larger than 5mb,you can change as needed.
},});
//CREATE Feed
Router.post('/',multer.array('files'),authoriazation,async (req,res) => {
const { txt,Feedtype } = req.body
const text = htmlToText(txt,{
wordwrap: 130
});
// uploading multiple image
const creteFeed = await new Feed({
Feedby: req.user,FeedTxt: text,deleted: 0,FeedReaction: 0,FeedComment: 0,FeedShare: 0,FeedType: Feedtype,})
const newFeed = await creteFeed.save()
if (req.files.length > 0) {
for (newfile of req.files) {
const blob = bucket.file(newfile.originalname);
const blobStream = blob.createWriteStream();
if (newFeed) {
const FeedMed = await new FeedMedia({
Feed_id: newFeed._id,Feedby: req.user,FeedMedia_type: newfile.mimetype,FeedMedia_name: newfile.originalname,category: 'Feed',url: `https://storage.googleapis.com/${bucket.name}/${newfile.originalname}`,deleted: 0
})
const newFeedMed = await FeedMed.save()
}
blobStream.on('finish',async() => {
});
blobStream.end(newfile.buffer);
}
}
res.json('success')
})
解决方法
您使用的 Multer.memoryStorage
不支持文件名选项,因为您在内存中存储文件时没有文件名。
https://github.com/expressjs/multer/issues/288
您可以改用 Multer.diskStorage
。
https://www.npmjs.com/package/multer#diskstorage
var storage = multer.diskStorage({
destination: function (req,file,cb) {
cb(null,'/tmp/my-uploads')
},filename: function (req,file.fieldname + '-' + Date.now())
}
})
var upload = multer({ storage: storage })
,
如果您想将 Date.now() 添加到 SERVER SIDE 中的 file.originalname,您可以这样做:
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req,callback) {
callback(null,'www/img/');
},Date.now() + '_' + file.originalname); // <-- CHANGE HERE
}
})
const upload = multer({ storage: storage });
app.post("/upload",upload.single('file'),(req,res) => {
res.status(200).send();
})
并制作一个 Fetch 帖子,以便:
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req,res) => {
res.status(200).send();
})
但是,如果您想在 CLIENT SIDE 中将 Date.now() 添加到 file.originalname你可以这样做:
const file = document.querySelector("input#file").files[0];
const formData = new FormData()
formData.append('file',file); // <-- DO NOT CHANGE HERE
fetch('/upload',{
method: 'POST',body: formData
});
并制作一个 Fetch 帖子:
const file = document.querySelector("input#file").files[0];
const formData = new FormData()
formData.append('file',body: formData
});
在这种情况下,file.originalname 将在发布后在 SERVER SIDE 中更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。