2010-08-31 16 views
8

Tak wiem, nie było wiele similar stanowisk, ale myślę, że jest to dość odmianie, aby uzasadnić swoje własne pytanie:PHP pobierania plików za pomocą danych POST poprzez jQuery AJAX

buduję eksportera XLS w PHP i jQuery. Próbuję POST tablicy z jQuery (który uważam, że będzie zbyt długo jako kwerenda GET) i używać go do generowania pliku XLS na mój serwer, który użytkownik może następnie pobrać.

Użyłem ukrytych elementów iframe w przeszłości, aby to osiągnąć, ale ponieważ przekierowują one tylko do adresu URL, wymaga to użycia GET, co denerwuje mnie.

Moje pytanie brzmi: w jaki sposób mogę przechowywać te pliki na moim serwerze i łączyć je z nimi, jeśli są generowane dynamicznie, potencjalnie przez wielu użytkowników? Czy ukryty element iframe byłby połączeniem z oddzielnym skryptem PHP, który lokalizuje plik IIR na podstawie identyfikatora sesji lub czegoś podobnego?

Dzięki z góry za wszelkie wskazówki o tym, co tutaj jestem pewien zostaje poproszony przez cały czas :)

Odpowiedz

9

Możliwe jest POST do ukrytego elementu iframe. Dlatego nie musisz się martwić o długość ciągu zapytania; opublikujesz pary klucz/wartość, które wygenerują twój plik XLS, a następnie wymuszą pobranie pliku do przeglądarki.

<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 Szybkie wyszukiwanie Google pojawił się ten artykuł: http://particletree.com/notebook/ajax-file-download-or-not/

Zasadniczo propozycja jest post formularz do aktualnej strony odpowiedzi z pobrania pliku. Ta alternatywa może być dla ciebie wystarczająco dobra.

+0

Bardzo fajny pomysł, ale niestety atrybut docelowy jest przestarzały w elementach formularza, więc nie wiem, czy byłoby to bezpieczne rozwiązanie. – Trafalmadorian

+0

Fascynujące. Zamierzam go wypróbować już teraz ... jeśli to zadziała, przyjmuję twoją odpowiedź :) – Trafalmadorian

+0

Masz rację. Jest przestarzałe w HTML 4.1 i XHTML 1.0. Jednak jest on ważny w XHTML 1.0 Transitional i nadal jest obsługiwany przez większość głównych przeglądarek. http://www.w3schools.com/TAGS/att_form_target.asp – simeonwillbanks

5

Wydaje się, że powinna być dość prosta, ale to wszystko zależy od tego, gdzie jesteś umieszczenie tych plików XLS generujesz. Jeśli chcesz, aby odpowiedź na to pytanie była plikiem "Zapisz plik" —, czyli samym plikiem —, wystarczy, że ustawisz nagłówek "Content-Disposition" na "załącznik ", a następnie odfiltruj zawartość pliku.

Jeśli masz zamiar wygenerować plik i zachować go, dobrze będzie musiał go przechowywać gdzieś z identyfikatorem. W takim przypadku wystarczy odpowiedzieć zwykłą stroną z linkiem "do pobrania", tak aby ten link zawierał identyfikator pliku. To może wywołać GET lub POST, a serwer odpowie na , że prawie tak, jak opisano powyżej.

Ukryty tak naprawdę nie bierze pod uwagę tego, moim zdaniem.

+0

Dziękuję bardzo za odpowiedź. Najlepiej byłoby, gdyby nie utrzymywałem ich w pobliżu i po prostu łączyłem użytkownika z oknem "Zapisz plik". Jeśli jednak to zrobię, muszę najpierw wysłać dane POST z ich klienta i wygenerować plik z tych danych, a następnie połączyć je z powrotem ... co wydaje mi się, że zmusiłoby mnie to do trzymania go na serwerze po jego wygenerowany. Cykliczna logika, wiem :) – Trafalmadorian

Powiązane problemy