Не существует решения JavaScript для этого выбора браузеров. Существует File API , но, хотя он работает в более новых версиях Firefox и Chrome, этого не произойдет в IE (пока еще нет признаков этого в бета-версиях IE9).
В любом случае, чтение файла локально и загрузка его через XMLHttpRequest неэффективна, потому что XMLHttpRequest не имеет возможности отправлять чистый двоичный текст, только текст Unicode. Вы можете закодировать двоичный файл в текст, используя base-64 (или, если вы действительно выделены, свою собственную 7-битную кодировку), но это будет менее эффективно, чем обычная загрузка файла.
Вы, безусловно, можете выполнять загрузку с помощью Flash (см. SWFUpload и др.) Или даже Java, если необходимо ( Jumploader ... В наши дни я бы не стал беспокоиться , так как распространенность Flash очень высока, а плагин Java продолжает снижаться). Вы не обязательно получите низкоуровневый элемент управления для разбиения на куски, но вам это действительно нужно? Для чего?
Другим возможным подходом является использование стандартного поля загрузки файла HTML, и когда происходит отправка, установите интервальный вызов для опроса сервера с XMLHttpRequest, спрашивая его, как далеко продвигается загрузка файла. Для сохранения текущего прогресса загрузки в сеансе или базе данных требуется немного работы на стороне сервера, чтобы его мог прочитать другой запрос. Это также означает использование библиотеки синтаксического анализа форм, которая дает вам обратный вызов прогресса, чего не делает большинство стандартных встроенных языков, таких как PHP.
Что бы вы ни делали, используйте подход «прогрессивного улучшения», позволяющий браузерам без поддержки использовать обычную загрузку HTML. Браузеры, как правило, имеют индикатор загрузки для загрузки HTML-файлов, он просто небольшой и его легко пропустить.