Okna otwierania i zapisywania plików

przez 5 współtwórców

Często spotykanym typem okien są takie, z których użytkownik ma możliwość otwierania lub zapisywana plików.

Wybór pliku

Okno wyboru pliku jest najczęściej używane przy komendach z menu 'Otwórz' i 'Zapisz', ale można też go użyć w innym miejscu, kiedykolwiek użytkownik potrzebuje wybrać plik. Interfejs XPCOM nslFilePicker jest używany w celu zaimplementowania okna wyboru pliku.

Note that the file picker only works from chrome URLs.

Można użyć tego okna w trzech trybach:

  • Otwórz - użytkownik jest proszony o wybór pliku do otwarcia
  • Pobierz folder - użytkownik jest proszony o wybór katalogu (folderu)
  • Zapisz - użytkownik jest proszony o wybór nazwy w celu zachowania pliku

Wygląd okna jest inny dla każdego z powyższych typów i dodatkowo różni się w zależności od platformy. Kiedy użytkownik wybierze plik lub folder, wtedy można z niego czytać lub do niego zapisywać.

Interfejs okna wyboru pliku nslFilePicker jest odpowiedzialny za wyświetlanie okna w jednym z trzech modów. Można ustawić kilka cech tego okna za pomocą wspomnianego interfejsu. Kiedy okno zostanie zamknięte, można użyć funkcji interfejsu, aby pobrać wybrany plik.

Tworzenie okna do wyboru pliku

Na początek należy stworzyć komponent okna do wyboru pliku i zainicjować go.

var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, "Select a File", nsIFilePicker.modeOpen);

Najpierw, tworzymy nowy obiekt "wybieracza pliku", który jest przechowywany w zmiennej "fp". Funkcja "init" jest używana w celu inicjalizacji "wybieracza". Funkcja ta ma 3 argumenty: okno macierzyste, które otwiera okno wyboru, tytuł okna wyboru i jego mod. W przykładzie powyżej mod to "modeOpen", którego używamy dla okna wyboru otwieranego pliku. Można też użyć modu modeGetFolder i modeSave. Te tryby to stałe interfejsu nsIFilePicker.

Default directory and filters

Istnieją dwie cechy okna wyboru, które można ustawić przed jego wyświetleniem.

  • Pierwsza to domyślny folder, który otwiera się w momencie otwarcia okna wyboru.
  • Druga to filtr, który określa listę typów plików wyświetlanych w oknie. Można użyć tego np. żeby ukryć wszystkie pliki poza .html.

Domyślny folder można zmienić przez ustawianie własności displayDirectory obiektu na wybrany folder. Folder ten powinien być obiektem nsILocalFile. Jeśli nie ustalisz domyślnego katalogu, będzie on wybrany automatycznie. Aby dodać filtry, wywołaj funkcję appendFilters(), aby ustalić typy plików do wyświetlania.

fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterImages);
fp.appendFilters(nsIFilePicker.filterText | nsIFilePicker.filterAll);
  • Pierwsza linijka z przykładu dodaje filtry dla plików HTML i obrazów, więc użytkownik będzie mógł wybrać tylko takie typy plików. Sposób, w jaki jest to robione zależy od platformy. Na niektórych każdy filtr trzeba oddzielić od pozostałych.
  • Druga linijka w przykładzie dodaje filtry dla plików tekstowych oraz dla wszystkich rodzajów. Tak więc użytkownik będzie miał możliwość wyświetlenia albo tylko plików tekstowych albo wszystkich typów.

Można również użyć filterXML lub filterXUL, odpowiednio dla plików XML i XUL. Jeśli chcesz filtrować inne typy plików, możesz użyć funkcji appendFilter():

fp.appendFilter("Audio Files","*.wav; *.mp3");

W przykładzie powyżej dodano filtr dla plików wave i mp3. Pierwszy argument to tytuł typu pliku, a drugi do lista masek plików rozdzielona średnikami. Można dodać tyle masek ile się chce. Można wywoływać appendFilter() tak często, jak tylko jest potrzebne dodawanie filtrów. Kolejność, w jakiej je podajesz, determinuje ich ważność. Typowo pierwszy w kolejności typ wybierany jest jako domyślny.

Wybranie i pobranie pliku

Wreszcie można otworzyć okno wywołując funkcję show(). Nie potrzebuje ona argumentów, ale zwraca kod statusu, który oznacza co wybrał użytkownik. Zauważmy, że funkcja nie zwróci nic dopóki użytkownik nie wybierze pliku. Zwraca ona jedną z następujących trzech stałych:

  • returnOK - użytkownik wybrał plik i nacisnął 'OK'. Plik wybrany przez użytkownika będzie przechowywany we własności file w oknie wyboru.
  • returnCancel - użytkownik nacisnął 'Anuluj'.
  • returnReplace - w trybie zapisu, ta wartość identyfikuje plik, który użytkownik wybrał do zastąpienia (returnOK zostanie zwrócone, kiedy użytkownik wpisze nazwę nowego pliku).

Powinieneś sprawdzić zwracaną wartość i następnie pobrać obiekt pliku z okna wyboru pliku stosując własność file.

var res = fp.show();
if (res == nsIFilePicker.returnOK){
  var thefile = fp.file;
  // --- do something with the file here ---
}

Następnie, zobaczymy jak utworzyć kreator.

Autorzy i etykiety dokumentu

Etykiety: 
Contributors to this page: fscholz, teoli, Mgjbot, Ptak82, Julcia r
Ostatnia aktualizacja: fscholz,