Можно ли загрузить файл с помощью AJAX, а не iframe или Flash?

Каждый раз, когда я изучал загрузку файлов AJAXy, где-то внизу всегда использовался iframe.

Можно ли загрузить файл с помощью AJAX, а не iframe или Flash? Как насчет более поздних версий Firefox и Chrome?

Я спорю со своими коллегами, утверждая, что вы не можете выполнить загрузку AJAXy с помощью чистого Javascript, поскольку вы не можете прочитать содержимое файла с жесткого диска пользователя, чтобы передать содержимое файла через вызов AJAX на серверный скрипт .


person Chad Johnson    schedule 25.01.2011    source источник
comment
Справедливости ради, три приведенных ниже ответа (на момент написания) предусматривают откат к IFrame/Flash для Internet Explorer. Поэтому я бы сказал, что не существует универсального способа загрузить файл с помощью AJAX без использования IFrame/Flash за кулисами.   -  person Jake    schedule 04.11.2011


Ответы (3)


Вы можете использовать файловый API в Firefox (3.6 и выше), и я думаю, что последний webkit также поддерживает его (не уверен).

Я сделал плагин Mootools, который работает на FF:

http://mootools.standupweb.net/dragndrop.php

person standup75    schedule 25.01.2011
comment
Только что понял это. Я собираюсь отказаться от своего аргумента! - person Chad Johnson; 25.01.2011

Вы можете использовать известный плагин jQuery Uploadify.

Uploadify — это плагин jQuery, который интегрирует полностью настраиваемую утилиту для загрузки нескольких файлов на ваш веб-сайт. Он использует смесь Javascript, ActionScript и любого серверного языка для динамического создания экземпляра любого элемента DOM на странице.

person Sarfraz    schedule 25.01.2011
comment
Это использует Flash, хотя. Я не упомянул, что не использовать Flash было требованием ... Я отредактировал вопрос, чтобы включить это. - person Chad Johnson; 25.01.2011

Я также использую программу загрузки файлов Valums.

person Dutchie432    schedule 25.01.2011
comment
Это тот, на который мне указал мой коллега. Автор утверждает, что этот плагин использует XHR для загрузки нескольких файлов с индикатором выполнения в FF3.6+, Safari4+, Chrome и использует скрытую загрузку на основе iframe в других браузерах, но, глядя на код, я не вижу никаких доказательств чистый javascript, не iframe, не flash загрузка происходит. - person Chad Johnson; 25.01.2011
comment
Хорошо, посмотрев еще немного, я вижу: xhr.send(file). Таким образом, очевидно, что новая функциональность FileApi заботится об отправке содержимого файла на сторону сервера, не подвергая его воздействию потенциально вредоносного Javascript на стороне клиента. - person Chad Johnson; 25.01.2011
comment
Я просто боролся с запасным вариантом этой библиотеки для IE - имейте в виду, что он не делает отчет о ходе работы, как правильная версия. - person Martin T.; 18.03.2011