Intereting Posts
Получить контент (текст) URL-адреса после запуска Javascript с помощью PHP Проверка файлов cookie и перенаправление с помощью Apache Поиск элементов XML PHP XPath вызов функции php в отдельном файле из ajax не работает Количество страниц в файлах PHP MS Word php файл отправляет переменную в внешний файл .js Массив сообщений, усеченный, max_input_vars не работает Будет ли сокращение количества включений / требует повышения производительности? Как проверить, является ли это слово японским или английским, используя PHP Получить параметры PUT с помощью Slim PHP регулярное выражение, которое будет извлекать предложения из текстового файла YAML или serialize () для хранения данных в MySQL Как подавать данные серии, которые имеют значения оси х и y в линейных диаграммах? PHP PDO избегает вопросительного знака, поэтому он не считает, что это заполнитель Проблема с Gearman: GEARMAN_COULD_NOT_CONNECT

загрузка файла через ajax с помощью php

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

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

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

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

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

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

Имейте 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> 

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

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

Взгляни на:

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

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

или:

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

во вспышке.

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

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

Например, например: http://www.phpletter.com/Our-Projects/AjaxFileUpload/

Взгляните на этот пример, я плагин немного лучше, чем тот, который находится в phpLetter, хотя phpLetter может иметь лучшие примеры для PHP-вещей.

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

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