2012-08-24 50 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) 
相关问题