загрузка файла через ajax с помощью php - PullRequest
4 голосов
/ 07 апреля 2009

Я хотел бы знать, возможно ли загрузить бинарный файл через ajax и php, и иметь ссылку для его загрузки. Я хотел бы избежать обновления всей страницы, как при использовании стандартной HTML-формы. До сих пор я использовал формы для получения информации, такие как радио и текстовые поля, и использовал javascript для переопределения поведения по умолчанию. Возможна ли аналогичная вещь для загрузки файла?

Ответы [ 8 ]

13 голосов
/ 07 апреля 2009

Невозможно отправить файл через Javascript.

Ваши варианты:

  • Скрытый трюк iframe, популяризированный Google. Внедрение этого может привести к некоторым неудобным вещам, поэтому есть библиотеки, такие как jQuery , которые имеют плагины, такие как популярный плагин формы jQuery , которые автоматизируют это, так что вы не будете при его использовании внутри должно быть грязно.
  • Использование Flash для облегчения процесса. В частности, SWFUpload очень популярен. При прочих равных условиях я бы, вероятно, согласился с решением Javascript, но в прошлом я использовал это с успехом. Отличительной особенностью этого решения является то, что оно поставляется с более приятным интерфейсом, таким как индикаторы загрузки, миниатюры и тому подобное. На данный момент, однако, вы просите пользователя иметь Flash + Javascript, который может не работать в некоторых ситуациях.
  • Использование Silverlight вместо Flash, хотя я бы не стал рассматривать это как жизнеспособное решение, так как оно имеет гораздо более низкий уровень проникновения, чем два других решения.
1 голос
/ 07 апреля 2009

Добавьте в форму IFrame (отображено: нет) и установите целевой объект формы в качестве этого iframe.

Моя форма выглядит так:

<iframe id="upload_target" name="upload_target" src="" style="width:0px;height:0px;border:0px solid #fff;"></iframe>
<form enctype="multipart/form-data" name="frmXMLUpload"  target="upload_target" action="scripts/uploadXML.php" method="POST" onSubmit="return checkExtension(fXMLFile.value, 'xml')">
<!--only allow up to 30k of data to be uploaded-->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input name="fXMLFile" id="fXMLFile" type="file" accept="text/xml" size="50" />
<p><input type="submit" value="Upload" /></p>
</form>

И разберитесь с ответом в вашем IFRAME. в основном это совсем не AJAX, но кто хотел бы, чтобы JavaScript имел доступ к файлам на вашем локальном компьютере? Это нормально, так оно и есть.

1 голос
/ 07 апреля 2009

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

Мне не совсем понятно, как обновить страницу, которая вызвала всплывающее окно, но я видел, как это было сделано в ANGEL Learning Management Suite.

0 голосов
/ 07 апреля 2009

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

0 голосов
/ 07 апреля 2009

Посмотрите на этот пример, я плагин немного лучше, чем плагин в phpLetter, хотя phpLetter может иметь лучшие примеры для PHP.

http://www.fyneworks.com/jquery/multiple-file-upload/#tab-Examples

0 голосов
/ 07 апреля 2009

Рассматривали ли вы jquery? Есть хорошие плагины, которые делают это изящно.

Как этот, например: http://www.phpletter.com/Our-Projects/AjaxFileUpload/

0 голосов
/ 07 апреля 2009

Как сказал Джон Гитцен, вы не можете делать это напрямую через AJAX ( т.е. отправлять фактические данные через AJAX). Однако вы можете отправить свою форму в невидимый iframe, а затем использовать AJAX, чтобы запросить у сервера URL-адрес. Это сохранит базовый пользовательский опыт - не обновляя страницу.

0 голосов
/ 07 апреля 2009

Обычно это невозможно сделать только в AJAX / Javascript.

Взгляните на:

http://www.codeplex.com/SLFileUpload/

для способа сделать это в приложении Silverlight.

или

http://www.element -it.com / Примеры / MultiPowUpload / SimpleUpload.html

во вспышке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...