Загрузка файла PHP с использованием данных POST через jQuery AJAX - PullRequest
8 голосов
/ 01 сентября 2010

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

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

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

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

Заранее благодарен за любое руководство по поводу того, что, я уверен, постоянно спрашивают :)

Ответы [ 2 ]

9 голосов
/ 01 сентября 2010

Возможна отправка скрытого фрейма. Поэтому вам не нужно беспокоиться о длине строки запроса; вы опубликуете пары ключ / значение, которые сгенерируют ваш файл 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/

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

5 голосов
/ 01 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...