Подтвердить что ты не робот

HttpPostedFile.FileName - отличается от IE

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

Я работал над этим, добавив код:

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

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

Спасибо.

4b9b3361

Ответ 1

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

Вот более подробная информация о позиции Mozilla:

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

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

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

Ответ 2

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

new FileInfo(myHttpPostedFileBase.FileName).Name

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

Ответ 3

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

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

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

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

Ответ 4

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

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