[js] Tworzenie pliku tekstowego i umożliwienie pobrania go


#1

Witam,

mam tablicę w która przechowuje pewne dane. Chciałbym żeby użytkownik mógł sobie tą tablicę pobrać w postaci pliku json. Tylko jak to zrobić?

W internecie znalazłem taki kod:

var saveToJSON = function(what) {

    var file = new File(script.file.parent, 'file.json');

    print(file);

// If file exists, we need to remove it first in order to overwrite its content.

    if (file.exists())

        file.remove();

    file.open();

    file.write(Json.encode(what));

    file.close();

}

Aczkolwiek nigdzie nie mogę znaleźć co ma przedstawiać to: script.file.parent. Ten kod w ogóle jest poprawny? Jakoś to takie za proste :stuck_out_tongue:

Z tym że ten kod utworzy i zapisze ten plik gdzieś. A co gdybym ja chciał, żeby wyskoczyło okienko w przeglądarce z zapytaniem "czy?" i "gdzie?" zapisać ten plik?


(Pablo_Wawa) #2

Musisz zdawać sobie sprawę, że operacje na plikach po stronie użytkownika są ograniczone (względy bezpieczeństwa), le oczywiście jest to możliwe. I teraz albo skorzystasz z możliwości oferowanych przez HTML5, albo na rozwiązaniach zaimplementowanych niezależnie przez producentów różnych przeglądarek (FF/Chrome/IE). Ale okienka "Zapisz jako" raczej nie uzyskasz, bo takie rzeczy nie są zaimplementowane w przeglądarkach - możesz ewentualnie wysyłać taki plik z poziomu skryptu na serwerze (np. PHP).


(piotryx) #3

Nie mam styczności z tworzeniem stron internetowych, ale można po stronie użytkownika zrobić łącze używające protokół data: np.

Download table[/code]

Jak już masz dane JSON to możesz je zakodować tekst do postaci base64 ("Zm9vIGJhcg==" w powyższym linku) np. uzywając tego: http://www.webtoolkit.info/javascript-base64.html

EDIT: Niestety ale teraz widzę że jest problem z tym, że nie jest otwierane okno Zapisz jako (musiałby być ustawiony nagłówek Content-Disposition: attachment; w odpowiedzi HTTP serwera)


(Pablo_Wawa) #4

@piotryx: być może pomoże trik z otwarciem nowego okienka (window.open), w którym będzie otwierany podany przez Ciebie link. Przykłady: