2012-08-24 21 views
13

Từ những gì tôi hiểu cho asp.net FileUpload.FileName ruturns đường dẫn đầy đủ trong khi trong firefox nó trả về chỉ tên tập tin. Làm thế nào tôi sẽ loại bỏ các đường dẫn từ chuỗi trả về như tôi chỉ cần các tên tập tin mã hóa html.asp.net FileUpload.FileName trả về đường dẫn đầy đủ, tức là khi không cần thiết

+0

'FileName' ist chỉ là tên tập tin ngay cả trong IE bắt đầu với IE8. http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-in-ie8.aspx –

+0

Tôi phải hỗ trợ cả IE7 và 8 , mặc dù im nhận thấy rằng trong khi chế độ trình duyệt của tôi là ie8 chế độ tài liệu giữ trở lại IE7 Trong IE7 và IE8 nó trả về 'NewsImages/C: \ Users \ wolmarans \ Desktop \ xxyyzz.png" ' – Reahreic

+0

IE rất tệ: ( –

Trả lời

18

Bạn có thể sử dụng lớp tĩnh Path để lấy tên tệp.

var fileName = Path.GetFileName(somePath); 

HttpUtility lớp tĩnh để mã hóa.

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

Ngay cả với 'fileName = HttpUtility.HtmlEncode (Path.GetFileName (fileBrowser.PostedFile.FileName))' nó vẫn trả về đường dẫn đầy đủ – Reahreic

+2

Ok, ý bạn là gì bởi đường dẫn đầy đủ. Bởi vì nếu bạn gọi 'Path.GetFileName (" C: \ mypath \ myfile.txt ");' thì bạn sẽ lấy lại '" myfile.txt "' – Josh

+0

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

5

Vì vậy, có cài đặt IE (không chỉ trong IE8 nhưng phiên bản mới hơn) trong Công cụ -> Tùy chọn Internet -> Bảo mật cho phép bạn bao gồm hoặc loại trừ đường dẫn tệp tải lên cục bộ.

IE8 Local Directory Path Setting

Vì lý do đó, nếu bạn không muốn giữ đầy đủ thông tin đường dẫn, nó là an toàn nhất để lột một cách rõ ràng đường dẫn nếu bạn đang muốn hỗ trợ trình duyệt IE (không chắc chắn nếu bất kỳ trình duyệt khác có một môi trường như vậy).

Như đã đề cập trong Josh, Path.GetFileName (...) là một lựa chọn tốt. Bạn cũng có thể sử dụng string.Split kết hợp với LINQ.

string fileNameOnly = somePath.Split('\\').Last(); 
0
Path.GetFileName(Request.Files["file"].FileName) 
Các vấn đề liên quan