загрузка файла через ajax с php

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


person Joshxtothe4    schedule 07.04.2009    source источник


Ответы (8)


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

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

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

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

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

person Powerlord    schedule 07.04.2009
comment
насколько я помню, opener относится к окну, которое открыло всплывающее окно. - person stefs; 09.04.2009

Имейте IFrame (display: none) в своей форме и установите цель вашей формы как этот 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 имел доступ к файлам на локальном компьютере? Это нормально, как есть.

person Peter Perháč    schedule 07.04.2009

Как правило, это невозможно сделать только с помощью AJAX/Javascript.

Взгляни на:

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

чтобы узнать, как это сделать в приложении Silverlight.

or:

http://www.element-it.com/Examples/MultiPowUpload/SimpleUpload.html

во вспышке.

person John Gietzen    schedule 07.04.2009

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

person Lucas Jones    schedule 07.04.2009

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

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

person 0plus1    schedule 07.04.2009

Взгляните на этот пример, у меня плагин немного лучше, чем у phpLetter, хотя у phpLetter могут быть лучшие примеры для PHP.

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

person cgp    schedule 07.04.2009

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

person Ali    schedule 07.04.2009