Получение полного пути (на стороне сервера) файла, загруженного с помощью Firefox?

Когда я использую форму, содержащую <input id="myFile" type="file" runat="server" /> для загрузки файла, мой код на стороне сервера видит только имя файла без полного пути при использовании Firefox, в то время как он отлично работает в IE.

Возможно ли получить в этом случае полный путь к файлу?

Ответ 1

Вы не можете. Фактически, только IE предоставляет эту информацию, которая не важна для сервера в большинстве случаев. Ни FF, ни Opera, по крайней мере, не предоставляют эту информацию.
[UPDATE] Также попытался с Safari, еще нет пути... Кто-то сообщил, что Chrome может предоставить информацию, хотя это бета-версия, которая может измениться...

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

На самом деле, я знаю, что некоторым людям нужна эта информация по некоторым причинам, поэтому они использовали JavaScript, чтобы забрать путь из поля ввода файла и поместить его в скрытое поле. Разработчики FF обнаружили, что это небезопасно (вы можете многому научиться с помощью простого пути... например, имени пользователя пользователя!), Поэтому запретили такое использование в FF3, что вызвало у некоторых людей недовольство этим выпуском...

Ссылки: Загрузите файл Firefox 3, упомянутый в Firefox 3 раздражение: включение ключа отключено в управлении загрузкой файлов...; также Отключенное поле ввода файлов приводит к большой проблеме удобства использования, среди многих других.

Ответ 2

Вы никогда не можете быть уверены в получении полного пути к файлу или даже над надежным именем файла или содержимым, представленным в файле для загрузки файлов. Даже если вы получаете полный путь к файлу, вы не знаете, какой символ разделителя пути находится в клиентской операционной системе, или расширение файла (если оно присутствует) означает что-либо вообще.

Если вашему приложению требуется filepath/filename/content-type переданного файла для чего-то большего, чем предоставление пользователю заголовка по умолчанию для загруженного элемента, он делает что-то неправильно и будет нуждаться в фиксации.

Ответ 3

Я уже говорил об этом в комментарии, но я думаю, что это повторяется.

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

Только спецификация HTML указывает, какое значение должно содержать в одном месте:

Пользовательские агенты могут использовать значение value как начальный файл имя.

Однако они также имеют примеры того, что кодировка multipart/form-data должна выглядеть как, и она не содержит файл путь.

Другими словами, IE нарушает стандарт, и вы не можете полагаться на другие браузеры, даже более поздние версии IE, для его поддержки.