Что происходит, когда вы выбираете несуществующий файл для загрузки в форме HTML?

В Internet Explorer стандартная форма загрузки файла HTML также позволяет напрямую вводить имя файла (вместо использования диалогового окна выбора файла). Это позволяет вводить несуществующие файлы. В других браузерах (которые не позволяют вам этого делать), я полагаю, что этот случай все еще может произойти, если вы удалите файл после его выбора.

Чтобы устранить ошибки, возникающие из-за этой проблемы (например, этой ), мне нужно добавить код проверки на стороне сервера (что возможно только в том случае, если запрос действительно отправляется на сервер, в этом я не уверен точка), или на стороне клиента (что не может быть очень простым, поскольку вы не можете получить доступ к реальному файлу из песочницы JavaScript). Кроме этого, кажется, что единственный (и, возможно, лучший) вариант - скрыть поле ввода с помощью магии CSS, как это делает GMail для файлов вложений.

Итак, что происходит, когда вы пытаетесь загрузить несуществующий файл? Все еще отправляется запрос POST? Или браузер прервет работу, и если это произойдет, как я могу это обнаружить?

3 ОТВЕТА

Действительно хороший вопрос, в .net есть Request.IsClientConnected, но не знаю, сработает ли это для вас в этом случае, или вы вообще используете .net.

Я бы попробовал запустить его через Fiddler на стороне клиента и WireShark на стороне сервера, и посмотреть, получишь ли ты какие-то идеи, посмотрев на шаблоны трафика. После этого вы сможете определить, как это обнаружить.

Интересно посмотреть, что вы придумали. Извините, не могу дать лучшего ответа.

0
11.12.2008 02:01:41

Сообщение происходит, но, по крайней мере, в .Net, элемент управления System.Web.UI.WebControls.FileUpload имеет свойство HasFile, которое будет False (я пытался загрузить c: \ tmp \ foo.pdf). Проверка этого свойства перед обработкой предотвратит любые ошибки, связанные с отсутствующим файлом.

0
11.12.2008 02:06:46
хм, я попробовал Fiddler, как предложено @seanb, и не вижу, чтобы запрос происходил. Кроме того, у меня есть точки останова на стороне сервера (Java / Struts) и я не могу проверить любые входящие запросы. Это IE6 на WinXP с использованием загрузки изображения FCKEditor.
Thilo 11.12.2008 03:07:40
Я провел свой тест с IE6 на WinXp против .Net. Извините - я не сильно помогу с FCKEditor.
Chuck 11.12.2008 16:16:06

Я думаю, что я понял это.

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

По крайней мере, в случае, который я упомянул (диалоговое окно загрузки изображений FCKEditor в WinXP и IE6), браузер вообще не отправляет форму (так что ничего не может быть сделано на стороне сервера).

Можно обнаружить проблему на клиенте, не используя обычную отправку формы, но имея обработчик onSubmit, который останавливает отправку (возвращает false) и вместо этого отправляет саму форму с помощью form.submit (). Если файл отсутствует, будет исключение.

try{
   form.submit();
}
catch (e){
// show some error message
}
return false;
2
18.12.2008 01:03:06