2015-11-02 70 views
1

當用戶上傳圖片時 - 我使用的是multer - 名稱中包含空格,我想用"-"替換空格,然後將文件名保存爲我的Mysql表格,然後重命名已上傳到"-"的新名稱的文件。 這是我的代碼。它會重新命名並且Mysql表格會使用連字符保存新名稱,但由於某種原因圖像無法上傳,甚至沒有錯誤,事實上POST請求實際上是成功的。使用fs重命名上傳的圖像使用fs

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

    }); 
} 
+0

你爲什麼想用原來的名字嗎?我會擔心惡意路徑.... – mscdex

+0

@mscdex你建議我做什麼?將每個上傳的圖像重命名爲任意字符串? –

+0

那麼,目前默認情況下,磁盤存儲使用由16位十六進制數字組成的隨機/唯一文件名保存到磁盤。文件名(不是絕對路徑)在'req.file.filename'屬性中可用。所以你可以把它移動到你想要/需要的任何位置。例如:'fs.rename(req.file.path,path.join('/ my/upload/storage',req.file.filename),...)' – mscdex

回答

1

爲什麼不在通過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#diskstorage