Загрузка файла PHP с использованием данных POST через jQuery AJAX

Поэтому я знаю, что было несколько подобных сообщений, но я думаю, что этого достаточно, чтобы оправдать свой собственный вопрос:

Я создаю экспортер XLS в PHP и jQuery. Я пытаюсь POST массив с jQuery (который, я считаю, будет слишком длинным, как GET querystring), и использовать его для генерации XLS-файла на моем сервере, который пользователь может загрузить.

Я использовал скрытые iframes в прошлом, чтобы выполнить это, но поскольку они просто перенаправляются на URL, это требует от меня использования GET, что заставляет меня нервничать.

Мой вопрос заключается в следующем: как я могу хранить эти файлы на своем сервере и ссылаться на них, если они генерируются динамически, потенциально несколькими пользователями? Будет ли скрытая ссылка iframe на отдельный скрипт PHP, который находит ИХ файл на основе идентификатора сеанса или что-то в этом роде?

Заранее спасибо за любое руководство здесь, на что я уверен, что все время спрашивают 🙂

Возможно POST для скрытого iframe. Поэтому вам не нужно беспокоиться о длине строки запроса; вы опубликуете пары ключ / значение, которые будут генерировать ваш файл XLS, а затем принудительно загружают файл в браузер.

<form method="post" action="/download/xls" target="download_xls"> <fieldset> <label>Key 1:</label> <input type="text" name="key_1" /> </fieldset> <fieldset> <label>Key 2:</label> <input type="text" name="key_2" /> </fieldset> <fieldset> <input type="submit" value="Submit" /> </fieldset> </form> <iframe id="download_xls" name="download_xls" width="0" height="0" scrolling="no" frameborder="0"></iframe> 

UPDATE Быстрый поиск в Google показал эту статью: http://particletree.com/notebook/ajax-file-download-or-not/

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

Кажется, это должно быть довольно просто, но все зависит от того, где вы кладете те файлы XLS, которые вы создаете. Если вы предполагаете, что ответ на сообщение должен быть диалогом «Сохранить файл», то есть сам файл, тогда вам нужно только убедиться, что заголовок «Content-Disposition» установлен на «вложение», а затем поток содержимого файла.

Если вы собираетесь сгенерировать файл и сохранить его, ну, вам придется хранить его где-нибудь с идентификатором. В этом случае вы просто ответите обычной страницей, на которой есть ссылка «скачать», так что эта ссылка включает идентификатор файла. Это может вызвать GET или POST, и сервер будет реагировать на это в значительной степени, как я описал выше.

На мой взгляд, скрытый <iframe> самом деле не фигурирует в этом.