2012-08-24 77 views
13

從我對asp.net的理解中可以看出FileUpload.FileName在firefox中返回完整路徑,它只返回文件名。我將如何從返回的字符串中刪除路徑,因爲我只需要html編碼的文件名。asp.net FileUpload.FileName在不需要時返回完整路徑

+0

'FileName' IST不僅是文件名,即使在IE與IE8開始。 http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-in-ie8.aspx –

+0

我必須同時支持IE7和8 ,儘管即時通訊注意到,雖然我的瀏覽器模式是ie8文檔模式不斷恢復到IE7 在IE7和IE8下它返回'NewsImages/C:\ Users \ wolmarans \ Desktop \ xxyyzz.png「 – Reahreic

+0

IE是如此糟糕:( –

回答

18

您可以使用Path靜態類來獲取文件名。

var fileName = Path.GetFileName(somePath); 

HttpUtility靜態類來編碼它。

var encoded = HttpUtility.HtmlEncode(fileName); 
+0

即使與 'fileName = HttpUtility.HtmlEncode(Path.GetFileName(fileBrowser.PostedFile.FileName))'它仍然返回完整路徑 – Reahreic

+2

好吧,你是什麼意思的完整路徑。因爲如果你調用'Path.GetFileName(「 C:\ mypath \ myfile.txt「);'那麼你會回來''myfile.txt'' – Josh

+0

C:\ Users \ wolmarans \ Desktop \ xxyyzz.png – Reahreic

5

所以有一個IE瀏覽器設置(不只是在IE8,但較新的版本)中下工具 - > Internet選項 - >安全,使您可以包含或排除文件上傳的本地路徑。

IE8 Local Directory Path Setting

出於這個原因,如果你不希望保持完整路徑信息,這是最安全的,如果任何其他瀏覽器也有這樣的設置,明確剝奪,如果你想支持IE(不知道的路徑)。

正如Josh所說,Path.GetFileName(...)是一個不錯的選擇。你也可以使用string.Split和Linq結合使用。

string fileNameOnly = somePath.Split('\\').Last(); 
0
Path.GetFileName(Request.Files["file"].FileName) 
相關問題