微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Multer 中更改文件原始名称

如何解决如何在 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 举报,一经查实,本站将立刻删除。