Я хотел бы знать, можно ли загрузить двоичный файл через ajax и php и получить ссылку для его загрузки. Я хотел бы избежать обновления всей страницы, как в стандартной html-форме. До сих пор я использовал формы для получения информации, такой как радио и текстовые поля, и использовал javascript для переопределения поведения по умолчанию. Возможно ли подобное для загрузки файла?
загрузка файла через ajax с php
Ответы (8)
Невозможно отправить файл через Javascript.
Ваши варианты:
- Скрытый трюк с iframe, популяризированный Google. Реализация этого самостоятельно может привести к некоторым неуклюжим вещам, поэтому существуют библиотеки, такие как jQuery, в которых есть плагины. , такие как популярный плагин форм для jQuery, который автоматизирует это, поэтому вам не нужно чувствовать себя грязным внутри, когда используй это.
- Использование Flash для облегчения процесса. В частности, SWFUpload очень популярен. При прочих равных я бы, вероятно, выбрал решение Javascript, но я успешно использовал это в прошлом. Самое классное в этом решении то, что оно поставляется с более приятным интерфейсом, таким как индикаторы загрузки, миниатюры и тому подобное. Однако на этом этапе вы просите пользователя иметь доступ к Flash + Javascript, что может не работать в некоторых ситуациях.
- Использование Silverlight вместо Flash, хотя я бы не считал это жизнеспособным решением, поскольку скорость проникновения у него гораздо ниже, чем у двух других решений.
Хотя вы не можете загрузить файл через AJAX, вы можете поместить элемент управления файлом во всплывающее окно, а затем обновить страницу, которая породила всплывающее окно, когда оно закроется.
Я не очень понимаю, как обновить страницу, которая породила всплывающее окно, но я видел, как это делается в ANGEL Learning Management Suite.
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 имел доступ к файлам на локальном компьютере? Это нормально, как есть.
Как правило, это невозможно сделать только с помощью AJAX/Javascript.
Взгляни на:
http://www.codeplex.com/SLFileUpload/
чтобы узнать, как это сделать в приложении Silverlight.
or:
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, показывает индикатор выполнения и без необходимость обновления страницы. Демонстрации можно посмотреть здесь.