HttpPostedFile.FileName - отличается от IE - PullRequest
25 голосов
/ 20 декабря 2008

Когда я загружаю файл на сайт с помощью ASP: File control, свойство FileName отличается в IE и Firefox. В Firefox он просто предоставляет имя файла, но IE предоставляет полный путь к файлу.

Я решил эту проблему, добавив код:

Dim FileName As String = file.FileName
If FileName.LastIndexOf("\") > 0 Then
    FileName = FileName.Substring(FileName.LastIndexOf("\") + 1)
End If

Но я не уверен, почему это будет по-разному в разных браузерах. Кто-нибудь знает причину этого?

Спасибо.

Ответы [ 4 ]

29 голосов
/ 13 октября 2011

Простой обходной путь для этого, протестированный в IE и Chrome

new FileInfo(myHttpPostedFileBase.FileName).Name

Это гарантирует, что вы всегда получите только имя файла, даже если указан путь.

12 голосов
/ 20 декабря 2008

Это проблема безопасности / конфиденциальности, Firefox / Mozilla делают это правильно, и вы не получите способ получить полный путь без надстройки, апплета, silverlight, flash или какого-либо другого механизма.

Вот больше информации о позиции Мозиллы:

https://developer.mozilla.org/en/Updating_web_applications_for_Firefox_3

См. Раздел Изменения безопасности-> Поля загрузки файлов

Я надеюсь, что IE последует этому примеру, поэтому у нас стабильная и безопасная среда.

7 голосов
/ 20 декабря 2008

В IE8 это поведение изменилось, и он будет передавать ТОЛЬКО имя файла, а не полный путь. ; -)

Подробности и ссылка на пост в блоге IE, в котором обсуждаются изменения в IE8: http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-in-ie8.aspx

Серверные приложения, пытающиеся разобрать имя файла, должны проверить, но не ожидают, что будет иметь обратную косую черту в имени файла.

Переопределение пользовательских настроек IE8: http://blogs.msdn.com/blogfiles/webtopics/WindowsLiveWriter/UploadingafileusingFileUploadcontrolfail_167/clip_image002_2.jpg

4 голосов
/ 27 мая 2013

Вы также можете использовать Path.GetFileName (File.FileName), который возвращает только имя файла. Пример:

Dim File As HttpPostedFile = context.Request.Files("txtFile")
' let's FileName is "d:\temp\1.txt"
Dim FileName As String = Path.GetFileName(File.FileName)
' FileName will be "1.txt"
...