簡體   English   中英

使用 fs 在 multer 中重命名上傳的圖像

[英]Rename uploaded image in multer using fs

當用戶上傳圖片時 - 順便說一下,我正在使用 multer - 名稱包含空格,我想在將文件名保存到 Mysql 表之前用"-"替換空格,然后重命名已上傳到帶有"-"的新名稱的文件。 這是我的代碼。 它確實重命名並且 Mysql 表用連字符保存了新名稱,但由於某種原因圖像沒有上傳,甚至沒有錯誤,事實上 POST 請求實際上是成功的。

router.post('/uploadpost', upload.single('image'), function(req, res){
var name = req.file.originalname;
var reName;
if(/\s/g.test(name)){
    reName = name.replace(" ", "-");
    fs.rename(req.file.path, reName, function(err){
        if(err){
            throw err;
        }

    });
}

當您通過 Multer 保存文件時,為什么不更改名稱? 類似的東西:

function generateName(){
   return 'newname';
}

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, generateName()); // generate new name 
  }
})

var upload = multer({ storage: storage })

文檔 - https://github.com/expressjs/multer#disktorage

您可以在multer輕松更改文件名,如下所示

const multer = require('multer');
let fs = require('fs-extra');

let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        let path = `tmp/upload`;
        fs.mkdirsSync(path);
        cb(null, path);
    },
    filename: function (req, file, cb) {
        console.log(file);
        cb(null, file.fieldname + '-' + Date.now() + "." + extension);
    }
})

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

在上面的代碼中,我給出了這樣的文件名file.fieldname fieldname 是您發送圖像的字段名稱,例如 fieldname 可以是"image"或任何東西,而不是 - , Date.now()上傳圖像的日期和在文件 ex images-1602486722326.jpeg最后一種類型或extension

或者

如果你想像下面這樣,你可以保留圖像的原始名稱

 filename: function (req, file, callback) {
        callback(null, file.originalname);
    }

這將獲得文件的原始名稱並將其提供給您正在上傳UPDATE和 MemoryStorage 的文件

const upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: 'bucket_name',
        acl: 'public-read',
        key: function (request, file, cb) {
            console.log(file);    |--------------  change name here which you want to use
                                  |              
            cb(null, file.originalname);  use
        }
    })
}).array('upload', 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM