2017-05-17 77 views
0

我有以下代碼(我仍在開發它),它將文件成功上傳到所需的路徑。如何在使用IFormFile上傳時更改文件名

private async Task AddImage(IFormFile image, string filePath) 
    { 
     List<string> PermittedFileTypes = new List<string> { 
     "image/jpeg", 
     "image/png", 
     }; 


     if (PermittedFileTypes.Contains(image.ContentType)) { 

     // HERE I WILL CHECK NAME AND CHANGE IF IT ALREADY EXSISTS 

     using (var stream = new FileStream(Path.Combine(filePath, image.FileName), FileMode.Create)) 
     { 
      await image.CopyToAsync(stream); 
     } 
     } 
    } 

我來臨的問題,其中文件試圖上傳具有相同的名稱(顯然是錯誤),但一個不同的文件。所以我想檢查一下文件是否存在,如果它確實改變了文件的名字,可能會在末尾附加一個「_#」,然後再以新名稱上傳文件。問題是IFormFile.FileName是唯一的爲了得到,我無法設置文件名

在網上看我看到人們建議將文件複製到一個新的名稱,但由於文件無法上傳我不能這樣做。幫助表示讚賞!

+1

相反的Path.Combine(文件路徑,image.FileName)只需使用Path.Combine(文件路徑,「TheNameYouLikeToHave.foo 「) –

+3

用'Guid'作爲文件名保存圖像,並在數據庫中保存虛擬路徑和'image.FileName'(作爲'DisplayName'屬性)。這樣你的文件名就是唯一的(不需要檢查),你可以把文件的名字反饋給用戶) –

回答

3

可以使用Path.Combine(filePath, Guid.NewGuid())代替Path.Combine(filePath, image.FileName)到garantee該文件名是唯一的。

相關問題