Na mojej stronie internetowej mam kilka dużych katalogów w formacie PDF i muszę je połączyć w celu pobrania. Kiedy szukałem w Google, znalazłem coś takiego, co zostało opisane poniżej. Powinien otworzyć wyskakujące okienko „ Zapisz jako ... ” po kliknięciu linku ...
<head>
<meta name="content-disposition" content="inline; filename=filename.pdf">
...
Ale to nie działa: / Kiedy łącze do pliku, jak poniżej, po prostu łączy się z plikiem i próbuje otworzyć plik.
<a href="filename.pdf" title="Filie Name">File name</a>
UPDATE (zgodnie z odpowiedziami poniżej):
Jak widzę, nie ma na to w 100% niezawodnego rozwiązania dla różnych przeglądarek. Prawdopodobnie najlepszym sposobem jest skorzystanie z jednej z poniższych usług internetowych i podanie linku do pobrania ...
Odpowiedzi:
Od odpowiedzi do Wymuś zapisanie pliku przez przeglądarkę po kliknięciu linku :
źródło
download
atrybut jest ograniczony do Chrome, Firefox i Opera. Nawet najnowsze wersje IE i Safari go nie obsługują. Aby uzyskać pomoc w przyszłości: sprawdź caniuse.com/#feat=download !U mnie działa w Firefoksie i Chrome.
źródło
target="_blank"
Może jednak sprawić, że będzie nieco bardziej użyteczna w nieobsługiwanych przeglądarkach (pliki PDF są następnie otwierane w nowym oknie / karcie, zamiast nadpisywać bieżącą stronę).target="_blank"
było to konieczne, ponieważdownload
tylko nie udało się poprawnie uruchomić pobierania (Chrome)download
atrybucie podasz ciąg znaków , będzie on używany jako nazwa pliku. Cały czas używam go w skryptach użytkownika.Metatagi nie są niezawodnym sposobem osiągnięcia tego wyniku. Generalnie nie powinieneś tego nawet robić - decyzję, co zrobić z dostarczoną przez Ciebie treścią, należy pozostawić użytkownikowi / agentowi użytkownika. Użytkownik może zawsze zmusić swoją przeglądarkę do pobrania pliku, jeśli chce.
Jeśli nadal chcesz zmusić przeglądarkę do pobrania pliku, zmodyfikuj bezpośrednio nagłówki HTTP. Oto przykład kodu PHP:
Zauważ, że jest to tylko rozszerzenie protokołu HTTP; niektóre przeglądarki i tak mogą go zignorować.
źródło
ob_end_flush()
też nie pomogło.Miałem ten sam problem i znalazłem rozwiązanie, które do tej pory działało świetnie. Umieszczasz następujący kod w swoim
.htaccess
pliku:Pochodzi z wymuszania pobrania pliku zamiast wyświetlania go w przeglądarce .
źródło
<FilesMatch "\.(pdf|xlsx?|docx?)$">
Znalazłem bardzo proste rozwiązanie dla Firefoksa (działa tylko z względnym, a nie bezpośrednim href): dodaj
type="application/octet-stream"
:źródło
Spróbuj dodać tę linię do swojego pliku .htaccess.
Mam nadzieję, że będzie działać, ponieważ jest niezależny od przeglądarki.
źródło
Zwykle tak się dzieje, ponieważ niektóre ustawienia przeglądarek lub wtyczki otwierają plik PDF bezpośrednio w tym samym oknie, co zwykła strona internetowa.
Poniższe mogą ci pomóc. Zrobiłem to w PHP kilka lat temu. Ale obecnie nie pracuję na tej platformie.
Zapisz powyższe jako download.php .
Zapisz ten mały fragment kodu jako plik PHP gdzieś na swoim serwerze i możesz go użyć do pobrania pliku w przeglądarce, zamiast wyświetlać go bezpośrednio. Jeśli chcesz udostępniać pliki inne niż PDF, usuń lub edytuj wiersz 5.
Możesz go używać w ten sposób:
Dodaj poniższe łącze do pliku HTML.
Źródła: ten blog
źródło
download.php?file=database_password_file.php
na przykład.Po prostu umieść poniższy kod w swoim
.htaccess
pliku:Możesz też zrobić sztuczkę za pomocą JavaScript
źródło
Właśnie tego użyłem, ale nie wiem, czy działa we wszystkich przeglądarkach.
Działa w przeglądarce Firefox:
źródło
naprawdę prosty sposób aby to osiągnąć, bez korzystania z zewnętrznych witryn pobierania lub modyfikację nagłówków itd. Jest po prostu utworzyć plik ZIP z wnętrza PDF oraz link bezpośrednio do pliku ZIP. Spowoduje to ZAWSZE wywołanie okna dialogowego Zapisz / Otwórz i nadal łatwo jest dwukrotnie kliknąć okna PDF, w których uruchamiany jest program skojarzony z plikiem .zip.
Przy okazji świetne pytanie, ja też szukałem odpowiedzi, ponieważ większość wtyczek PDF osadzonych w przeglądarce zajmuje bardzo dużo czasu, zanim cokolwiek wyświetli (i często zawiesza przeglądarkę podczas ładowania pliku PDF).
źródło
Rozwiązanie po stronie serwera jest bardziej kompatybilne, dopóki atrybut „download” nie zostanie zaimplementowany we wszystkich przeglądarkach.
Jednym z przykładów w Pythonie może być niestandardowa procedura obsługi żądań HTTP dla magazynu plików. Linki wskazujące na magazyn plików są generowane w następujący sposób:
Oto kod:
źródło
Bardzo prostym sposobem na to, jeśli chcesz wymusić pobieranie pojedynczego linku na swojej stronie, jest użycie atrybutu pobierania HTML5 w linku href.
Zobacz: http://davidwalsh.name/download-attribute
dzięki temu możesz zmienić nazwę pliku, który użytkownik pobierze, a jednocześnie wymusi pobieranie.
Odbyła się debata, czy to dobra praktyka, czy nie, ale w moim przypadku mam wbudowaną przeglądarkę do pliku PDF, a przeglądarka nie oferuje linku do pobrania, więc muszę udostępnić go osobno. Tutaj chcę się upewnić, że użytkownik nie otworzy pliku PDF w przeglądarce internetowej, co byłoby mylące.
Nie będzie to konieczne, aby otworzyć okno dialogowe Zapisz jako, ale spowoduje pobranie łącza bezpośrednio do wstępnie ustawionego miejsca docelowego pobierania. Oczywiście, jeśli robisz witrynę dla kogoś innego i chcesz, aby ręcznie wpisywali atrybuty swoich linków, jest to prawdopodobnie zły pomysł, ale jeśli istnieje sposób na umieszczenie atrybutu w linkach, może to być lekkie rozwiązanie.
źródło
To jest stary post, ale tutaj jest moje rozwiązanie w JavaScript wykorzystujące bibliotekę jQuery.
Wystarczy, że użyjesz class
force-download
w swoim<a>
tagu i wymusisz pobieranie automatycznie. Możesz również dodać go do rodzicadiv
i odebrać wszystkie zawarte w nim linki.Przykład:
Jest to świetne rozwiązanie dla WordPress i wszelkich innych systemów lub niestandardowych witryn internetowych.
źródło
Po nazwie pliku w kodzie HTML dodaję
?forcedownload=1
To był dla mnie najprostszy sposób na wywołanie okna dialogowego w celu zapisania lub pobrania.
źródło
Jeśli masz wtyczkę w przeglądarce, która wie, jak otworzyć plik PDF, otworzy się ona bezpośrednio. Podobnie jak w przypadku obrazów i treści HTML.
Zatem alternatywnym podejściem nie jest wysyłanie w odpowiedzi typu MIME. W ten sposób przeglądarka nigdy nie będzie wiedzieć, która wtyczka powinna ją otworzyć. W związku z tym wyświetli okno dialogowe Zapisz / Otwórz .
źródło
Właśnie miałem bardzo podobny problem z dodanym problemem, który potrzebowałem do tworzenia linków do pobierania plików w pliku ZIP.
Najpierw próbowałem utworzyć plik tymczasowy, a następnie podałem łącze do pliku tymczasowego, ale stwierdziłem, że niektóre przeglądarki po prostu wyświetlają zawartość (plik CSV Excel) zamiast oferować pobranie. Ostatecznie znalazłem rozwiązanie za pomocą serwletu. Działa zarówno na Tomcat, jak i GlassFish, a wypróbowałem go w Internet Explorerze 10 i Chrome.
Aplet przyjmuje jako dane wejściowe pełną nazwę ścieżki do pliku ZIP oraz nazwę pliku znajdującego się w pliku ZIP, który powinien zostać pobrany.
W moim pliku JSP mam tabelę wyświetlającą wszystkie pliki wewnątrz zip, z linkami, które mówią:
onclick='download?zip=<%=zip%>&csv=<%=csv%>'
Kod serwletu znajduje się w download.java:
Aby skompilować na Tomcat, potrzebujesz ścieżki klas zawierającej tomcat \ lib \ servlet-api.jar lub na GlassFish: glassfish \ lib \ j2ee.jar
Ale każdy z nich będzie działał na obu. Musisz także ustawić serwlet na
web.xml
.źródło
Dodaj nagłówek odpowiedzi Content-Disposition: załącznik; po którym następuje nazwa pliku. Usuń Meta Content-Disposition; Inline; który otworzy dokument w tym samym oknie
W java jest ustawiony jako
źródło
W przypadku dużych plików PDF przeglądarka się zawiesza. W Mozilli menu Narzędzia → Opcje → Aplikacje , a następnie obok typu zawartości dokumentu Adobe Acrobat. Z listy rozwijanej Akcja wybierz Zawsze pytaj .
To nie zadziałało, więc zadziałało:
Menu Narzędzia * → Dodatki → Adobe Acrobat (wtyczka Adobe PDF do przeglądarki Firefox) → WYŁĄCZ. Teraz mogę pobierać e-booki!
źródło