HttpPostedFile.Имя файла - отличается от IE
-
23-08-2019 - |
Вопрос
Когда я загружаю файл на сайт с помощью 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"