Я хотел бы знать, можно ли загружать двоичный файл через ajax и php и иметь ссылку для его загрузки. Я хотел бы избежать обновления всей страницы, как со стандартной формой html. До сих пор я использовал формы для получения информации, такие как радио и текстовые поля, и использование javascript для переопределения поведения по умолчанию. Возможно ли подобное для загрузки файла?
Невозможно отправить файл через Javascript.
Ваши варианты:
Хотя вы не можете загрузить файл через 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, показывает индикатор выполнения и не требует обновления страницы. Здесь можно увидеть демонстрации.