Получить полный путь (на стороне сервера) файла, загруженного с помощью Firefox?
Когда я использую форму, содержащую <input id="myFile" type="file" runat="server" />
чтобы загрузить файл, мой код на стороне сервера видит только имя файла без полного пути при использовании Firefox, в то время как он отлично работает в IE.
Возможно ли в этом случае получить полный путь к файлу на стороне сервера?
3 ответа
Ты не можешь. На самом деле, только IE предоставляет эту информацию, которая в большинстве случаев не важна для сервера. Ни FF, ни Opera, по крайней мере, не предоставляют эту информацию.
[ОБНОВЛЕНИЕ] Также пробовал с Safari, по-прежнему нет пути... Кто-то сообщил, что Chrome может предоставить информацию, хотя и, будучи бета, может измениться...
Возможно, они вам могут понадобиться в некоторых случаях в интрасети. В таком случае вы можете попросить пользователя вставить путь во вторичное поле ввода... Не очень удобно, но, по крайней мере, они будут знать, что предоставляют информацию.
На самом деле, я знаю, что некоторые люди нуждались в этой информации по некоторым причинам, поэтому они использовали JavaScript, чтобы выбрать путь из поля ввода файла и поместить его в скрытое поле. Разработчики FF обнаружили, что это небезопасно (вы можете многому научиться по простому пути... например, по имени пользователя!), Поэтому запретили такое использование в FF3, заставляя некоторых людей злиться на этот релиз...
Ссылки: окно загрузки файлов в Firefox 3, упомянутое в раздражении Firefox 3: отключение ключа в управлении загрузкой файлов...; Кроме того, отключение поля ввода файла приводит к большим проблемам с юзабилити, среди многих других.
Вы никогда не можете быть уверены, что получили полный путь к файлу или даже надежное имя файла или тип содержимого, представленный в файле загрузки файла. Даже если вы получите полный путь к файлу, вы не знаете, какой символ-разделитель пути используется в операционной системе клиента, или расширение файла (если имеется) обозначает что-либо вообще.
Если вашему приложению требуется filepath / filename / content-type представленного файла для чего-то большего, чем предоставление пользователю заголовка по умолчанию для загруженного элемента, оно делает что-то не так и нуждается в исправлении.
Я уже заявил об этом в комментарии, но я думаю, что это стоит повторить.
Microsoft решила заставить файловый элемент управления указывать полный путь к файлу для использования в приложениях интрасети.
Спецификация HTML только упоминает, что значение должно содержать в одном месте:
Пользовательские агенты могут использовать значение атрибута value в качестве начального имени файла.
Однако у них также есть примеры того, как должна выглядеть кодировка multipart/form-data, и она не содержит пути к файлу.
Другими словами, IE нарушает стандарт, и вы не можете полагаться на другие браузеры, даже более поздние версии IE, для его поддержки.