Saya bertanya-tanya bagaimana cara membuat tautan file PDF dapat diunduh alih-alih membukanya di browser? Bagaimana ini dilakukan di html? (Saya akan berasumsi itu dilakukan melalui javascript atau sesuatu).
javascript
html
404Error
sumber
sumber
Jawaban:
Anda tidak dapat melakukan ini dengan HTML. Ini adalah solusi berbasis server. Anda harus melakukan streaming file agar browser memicu dialog simpan.
Saya menyarankan untuk tidak melakukan ini. Bagaimana pengguna berinteraksi dengan PDF harus diserahkan kepada pengguna.
UPDATE (2014):
Jadi ... jawaban ini masih banyak mendapat downvote. Saya berasumsi sebagian dari itu adalah bahwa ini telah dijawab 4 tahun yang lalu dan seperti yang Sarim tunjukkan, sekarang ada atribut HTML 5
download
yang dapat menangani ini.Saya setuju, dan menurut saya jawaban Sarim bagus (mungkin itu jawaban yang dipilih jika OP pernah kembali). Namun, jawaban ini masih merupakan cara yang dapat diandalkan untuk menanganinya (seperti yang ditunjukkan oleh jawaban Yiğit Yener dan - anehnya - orang setuju dengannya). Meskipun atribut download telah mendapatkan dukungan, itu masih belum tentu:
http://caniuse.com/#feat=download
sumber
http
tag ke pertanyaan. Alih-alih paragraf 2: "Anda mungkin ingin mempertimbangkan kembali apakah mencegah langsung melihat PDF adalah untuk kepentingan terbaik semua pengguna. Karena itu ..." Kemudian asumsikan OP dan pembaca mendatang adalah orang dewasa dan lanjutkan ke jawaban yang dapat ditindaklanjuti seperti Yener's .Dengan html5, sekarang dimungkinkan. Setel elemen "unduh".
Sumber: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download
sumber
if ("download" in document.createElement("a")){ ... }
Ini hanya dapat dilakukan dengan menyetel header tanggapan http dengan kode sisi server. Yaitu;
sumber
Anda perlu mengubah header http yang dikirim. Bergantung pada server Anda, Anda dapat mengubah .htaccess Anda sebagai berikut:
sumber
Anda perlu menggunakan skrip PHP (atau bahasa sisi server lain untuk ini)
dan gunakan httacces untuk mengarahkan (menulis ulang) ke file PHP, bukan pdf
sumber
http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.php
dan mencoba membuka file pdf, itu masih membuka yang asli di browser, alih-alih mengunduh versi yang diganti namanya ...Kamu bisa memakai
Lihat contoh ini:
http://www.codeproject.com/KB/aspnet/textfile.aspx
Ini berlaku untuk ASP.NET. Saya yakin Anda dapat menemukan solusi serupa di semua bahasa sisi server lainnya. Namun tidak ada solusi javascript yang terbaik dari pengetahuan saya.
sumber
Tanpa atribut html5 seseorang dapat mencapai ini dengan menggunakan php:
Buat file php bernama download.php dengan kode ini:
Sekarang jika Anda ingin mengunduh pdf secara otomatis, tulis javascript ini:
Jika Anda ingin ini berfungsi pada tautan, gunakan ini ...
sumber
$file = $_GET['$file'];
. Karena seseorang juga dapat memanggildownload.php?file=../../../wp-config.php
atau sumber daya lain yang diberikan. Pemeriksaan tambahan untuk ekstensi, jenis pantomim dan jalur yang diizinkan untuk mengunduh (dan menghapus hal-hal seperti "../") sangat penting!<a href='download.php'> ?
Ketika Anda ingin langsung mengunduh gambar atau file pdf dari browser alih-alih membukanya di tab baru maka di javascript Anda harus mengatur nilai untuk mengunduh atribut buat tautan dinamis
Untuk pembaruan Chrome baru beberapa acara waktu tidak berfungsi. untuk kode berikut akan digunakan
Menambahkan anak dan menghapus anak berguna untuk Firefox, browser penjelajah Internet saja. Di chrome ini akan bekerja tanpa menambahkan dan menghapus child
sumber
Solusi yang paling berhasil untuk saya adalah yang ditulis oleh Nick di blognya
Ide dasar dari solusinya adalah dengan menggunakan mod header server Apache dan mengedit .htaccess untuk menyertakan direktif FileMatch yang memaksa semua file * .pdf untuk bertindak sebagai aliran alih-alih lampiran. Meskipun ini tidak benar-benar melibatkan pengeditan HTML (sesuai pertanyaan asli), ini tidak memerlukan pemrograman apa pun.
Alasan pertama saya lebih suka pendekatan Nick adalah karena ini memungkinkan saya untuk mengaturnya berdasarkan per folder sehingga PDF dalam satu folder masih dapat dibuka di browser sambil mengizinkan orang lain (yang kami ingin pengguna mengedit dan kemudian mengunggahnya kembali) untuk dipaksa sebagai unduhan.
Saya juga ingin menambahkan bahwa ada opsi dengan PDF untuk mengirim / mengirimkan formulir yang dapat diisi melalui API ke server Anda, tetapi itu membutuhkan waktu untuk diterapkan.
Alasan kedua karena waktu adalah pertimbangan. Menulis penangan file PHP untuk memaksa disposisi konten di header () juga akan memakan waktu lebih sedikit daripada API, tetapi masih lebih lama daripada pendekatan Nick.
Jika Anda tahu cara mengaktifkan mod Apache dan mengedit .htaccss, Anda bisa mendapatkannya dalam waktu sekitar 10 menit. Ini membutuhkan hosting Linux (bukan Windows). Ini mungkin bukan pendekatan yang tepat untuk semua penggunaan karena memerlukan akses server tingkat tinggi untuk mengonfigurasi. Dengan demikian, jika Anda mengatakan akses, itu mungkin karena Anda sudah tahu cara melakukan dua hal itu. Jika tidak, periksa blog Nick untuk instruksi lebih lanjut.
sumber
Karena cara html5 (jawaban saya sebelumnya) tidak tersedia di semua browser, berikut cara lain yang sedikit diretas.
Solusi ini mengharuskan Anda menyajikan file yang dimaksudkan dari domain yang sama, ATAU memiliki izin CORS.
application/octet-stream
. Hasilnya akan terlihat seperti inidata:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
Sekarang siap
location.href = data
. Ini akan menyebabkan browser mengunduh file. Sayangnya Anda tidak dapat mengatur nama file atau ekstensi dengan cara ini. Mengotak-atik jenis media bisa menghasilkan sesuatu.Lihat detailnya: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
sumber
Saya perlu melakukan ini untuk file yang dibuat dengan nama dinamis dalam folder tertentu dan dilayani oleh IIS.
Ini berhasil untuk saya:
Tambahkan tajuk baru dengan info berikut:
Name: content-disposition Value: attachment
(dari: http://forums.iis.net/t/1175103.aspx?add+CustomHeaders+only+for+certain+file+types+ )
sumber
Jika Anda menggunakan HTML5 (dan saya rasa sekarang hari semua orang menggunakan itu), ada atribut yang disebut
download
.ex.
<a href="somepathto.pdf" download="filename">
di sini
filename
opsional, tetapi jika disediakan, ini akan menggunakan nama ini untuk file yang diunduh.sumber
<a href="download/Curriculum_it.pdf.zip">Download curriculum</a>
atau itu:<a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>
dan saya sama sekali tidak melihat perbedaan dalam cara kerjanya. Keduanya mengunduh .zip saya. Dan yang kedua menggunakan opsi nama file tampaknya tidak melakukan apa-apa.Perilaku tersebut harus bergantung pada cara browser disiapkan untuk menangani berbagai jenis MIME. Dalam hal ini tipe MIME adalah application / pdf. Jika Anda ingin memaksa browser untuk mengunduh file, Anda dapat mencoba memaksa jenis MIME yang berbeda pada file PDF. Saya merekomendasikan untuk tidak melakukannya karena seharusnya menjadi pilihan pengguna apa yang akan terjadi ketika mereka membuka file PDF.
sumber
Anda dapat menggunakan download.js ( https://github.com/rndme/download dan http://danml.com/download.html ). Jika file ada di URL eksternal, Anda harus membuat permintaan Ajax, tetapi jika tidak, maka Anda dapat menggunakan fungsi:
Baca dokumentasi mereka untuk detail lebih lanjut di GitHub.
sumber
Akhirnya saya menemukan ...... buat tag anchor dinamis dan klik di atasnya
'Payment.pdf' hanya untuk nama kustom.
sumber