Вопрос

Когда я загружаю файл на сайт с помощью 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

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

Спасибо.

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

new FileInfo(myHttpPostedFileBase.FileName).Name

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

В 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

Вы также можете использовать Path.GetFileName(Файл.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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top