Wątek przeniesiony 2014-05-12 17:21 z Webmastering przez furious programming.

Wymuszenie pobrania załącznika przez przeglądarkę

0

Próbuję napisać kod HTML do pobierania załącznika na dysk, bez względu na jego typ (czyt: format); Jednak nie potrafię sobie z tym poradzić, bo standardowy link, np. w tej postaci:

<a href="link/to/file.ext">Click to download</a>

powoduje pokazanie jego zawartości w przeglądarce; Jeśli jest to plik tekstowy czy obraz, zawartość wyświetlana jest w zakładce przeglądarki; Jeśli jest to plik .zip - ani go nie pokazuje (nie dziwne), ani nie pokazuje okna do jego pobrania, w zamian za to pokazuje listę plików w danym katalogu;

Potrzebuję wymusić pokazanie okna do zapisu pliku na dysku, bez względu na jego format/rozszerzenie; Do tej pory znalazłem w sieci sposoby wykorzystujące skrypty, lub wpisy w htaccess, ale tego chcę uniknąć, dlatego że strona ma działać także na localhost; Znalazłem też np. kody z właściwością target:

<a href="link/to/file.ext" target="_blank">Click to download</a>

ale to jedynie tworzy nową zakładkę, więc nie przyda się; Podobne przykłady z download:

<a href="link/to/file.ext" download target="_blank">click to download</a>

także nie pomagają - download jest pomijany, a target tworzy jedynie nową zakładkę, więc w niczym to nie pomaga;

Czy istnieje możliwość zapisania w kodzie HTML bądź CSS linku tak, aby bez względu na format czy rozszerzenie pliku, był on zawsze pobierany?

Próbowałem znaleźć w kodzie innych stron jakieś informacje, np. chomukuj czy 4programmers, ale niestety nic szczególnego nie znalazłem; Na 4programmers kliknięcie w link do tekstowego załącznika zawsze otwiera okienko do pobierania, a w kodzie znalazłem jedynie standardowy znacznik a href, nic więcej, więc gdzieś coś jeszcze musi być ustawione;

Gdyby ktoś mógł co nieco podpowiedzieć, np. @dzek69 - byłbym bardzo wdzięczny.

2

od strony serwera musisz ustawic naglowek "content-disposition" zeby wymuszal wyslanie zawartosci jako zalacznika i wtedy wyskoczy zapisz jako

Przyklad:
http://stackoverflow.com/questions/5278975/http-response-header-content-disposition-for-attachments

Link pogladowy, implementacja zalezna od jezyka napisania skryptu.

0

Hmm, od strony serwera zda egzamin - dziękuję;

Doczytałem jeszcze, że linkami nie zarządza przeglądarka, a serwer, więc jeśli strona będzie znajdować się na serwerze, to po ustaleniu reguł content-disposition będzie działać prawidłowo; Dump strony na dysku już nie, więc lokalna kopia strony otwarta w przeglądarce, zawsze będzie próbować wyświetlić zawartość w karcie, i nic na to nie można poradzić.

1

Lepiej modyfikować Content-Type niż Content-Disposition - jakaś przeglądarka lubiła się tego nie słuchać (to możliwe jest już nieaktualny problem, ale w głowie mi zostało).
application/octet-stream to typ dla binarnych danych - zawsze będą pobrane przez przeglądarkę. Można też "wymyślić" sobie nieznany przeglądarce typ - wtedy też go pobierze (np. w miarę często widuję application/force-download)

Jak Apache to wystarczy w .htaccess (najlepiej wydzielić do tego osobny folder)

AddType application/octet-stream .ico .txt .bat .css .ext

BTW: W przykładzie wyżej podałem *.css - pamiętaj, że pliki normalnie używane przez przeglądarkę (style, skrypty, obrazki) zależą właśnie od Content-Type, nie od nazwy pliku. Jeżeli zrobisz te pliki "binarnymi" - przeglądarka nie ich "ogarniać" tak jak domyślnie (serwery www domyślnie dla określonych rozszerzeń istniejących plików podają odpowiednie Content-Type)

0

Dobra, czyli już wszystko wiem jak poustawiać, ewentualnie sobie jeszcze poczytam, ale raczej nie będę miał problemów; Dziękuję za odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1