Bagaimana saya bisa membuat tautan unduhan dalam HTML?
224
Saya punya ide dasar tentang HTML. Saya ingin membuat tautan unduhan di situs web sampel saya, tetapi saya tidak tahu cara membuatnya. Bagaimana cara membuat tautan untuk mengunduh file daripada mengunjunginya?
yang target=_blankakan membuat jendela browser baru muncul sebelum download dimulai. Jendela itu biasanya akan ditutup ketika browser menemukan bahwa sumber daya adalah unduhan file.
Perhatikan bahwa jenis file yang dikenal oleh browser (mis. Gambar JPG atau GIF) biasanya akan dibuka di dalam browser.
Anda dapat mencoba mengirim tajuk yang tepat untuk memaksa unduhan seperti yang dijelaskan misalnya di sini . (skrip sisi server atau akses ke pengaturan server diperlukan untuk itu.)
mengapa tidak menggunakan atribut unduhan, jika Anda mendapatkan file seperti jpg, itu akan mengunduh, bukan hanya membuka.
Ben
2
Harap hilangkan "target = '_ blank'", karena itu tidak akan berfungsi di IE. Apakah Anda bahkan mengujinya?
Tara
4
@Dudeson tolong tentukan "apa yang tidak akan berfungsi" dan versi IE yang Anda bicarakan. (Sekarang aman untuk menggunakan pendekatan yang dijelaskan sebagai jawaban TIIUNDER yang jauh lebih baru di bawah, meskipun. Seharusnya mendapat tanda terima.)
Pekka
2
@Sergiu jawabannya adalah tujuh tahun. Saya tidak bisa menghapusnya, dan penanya belum menanggapi permintaan saya untuk mengganti tanda terima ... tidak ada yang bisa kami lakukan, meskipun saya akan menambahkan tautan ke jawaban yang lebih baru
Pekka
1
@Dani lihat jawaban TIIUNDER di bawah ini, yang mana yang benar sekarang.
Pekka
455
Di browser modern yang mendukung HTML5, berikut ini dimungkinkan:
saya menggunakan kode yang sama untuk mengunduh file PFD dan saya diuji di semua browser semua mendukung tetapi di safari kode ini tidak berfungsi safari alih-alih mengunduh file pdf yang terbuka di tab baru.
Bagaimana saya melakukan ini jika saya membuat tautan secara dinamis pada klik tombol?
Nongthonbam Tonthoi
1
@NongthonbamTonthoi Anda tidak dapat menggunakan javascript untuk secara dinamis menetapkan href ke tag
akshay kishore
1
Ini tidak akan berhasil, karena terbatas pada URL yang berasal dari sumber yang sama.
Nathan
22
Selain itu (atau sebagai pengganti) <a downloadatribut HTML5 yang telah disebutkan, unduhan
peramban ke perilaku disk juga dapat dipicu oleh tajuk tanggapan http berikut:
Tetapi itu membutuhkan implementasi sisi server, benar?
Lombas
@Lombas ya, hanya server yang dapat mengatur header respons http.
Myobis
Apakah ini jawaban yang lengkap? Anda juga perlu mengirim header Jenis Konten dan membaca file untuk memaksa unduhan. Mungkin ingin dan itu untuk jawaban Anda. Jawaban lengkap di sini: stackoverflow.com/a/1465631/2757916 .
Govind Rai
ini sangat cocok untuk implementasi sisi server, hanya juga jenis kontennya. itu didukung dengan baik dibandingkan dengan downloadatribut
william.eyidi
9
Tautan unduhan akan menjadi tautan ke sumber daya yang ingin Anda unduh. Ini dibangun dengan cara yang sama dengan tautan lainnya:
<ahref="path to resource.name of file">Link</a><ahref="files/installer.exe">Link to installer</a>
Untuk menautkan file, lakukan hal yang sama seperti tautan halaman lainnya:
<ahref="...">link text</a>
Untuk memaksa sesuatu untuk mengunduh walaupun mereka memiliki plugin yang disematkan (Windows + QuickTime = ugh), Anda dapat menggunakan ini di htaccess / apache2.conf Anda:
Terima kasih! ini lebih sederhana dan di seluruh server! : DI menemukan tautan ini yang sedikit lebih rumit. Terima kasih. htaccess-guide.com/adding-mime-types
Joe DF
Itu akan membuat semua file jenis itu hanya diunduh. Baik jika itu yang Anda inginkan, tetapi bisa menyebabkan cocok jika Anda lupa dan ingin file lain dari jenis itu untuk ditampilkan di dalam browser alih-alih unduhan.
TecBrat
4
Utas ini mungkin sudah kuno sekarang, tetapi ini berfungsi dalam html5 untuk file lokal saya.
Ini harus membuka pdf di windows baru dan memungkinkan Anda untuk mengunduhnya (setidaknya di firefox). Untuk file lain, cukup buat nama file. Untuk gambar dan musik, Anda ingin menyimpannya di direktori yang sama dengan situs Anda. Jadi itu akan seperti
Atribut unduhan tidak berfungsi di IE, itu mengabaikan "unduhan" sepenuhnya. Pengunduhan tidak berfungsi di Firefox jika href menunjuk ke situs jarak jauh. Jadi contoh Odin tidak berfungsi di Firefox 41.0.2.
Ada satu lagi kehalusan yang dapat membantu di sini.
Saya ingin memiliki tautan yang memungkinkan pemutaran dan tampilan di dalam peramban serta satu untuk diunduh murni. Atribut unduhan baru baik-baik saja, tetapi tidak berfungsi sepanjang waktu karena paksaan browser untuk memutar atau menampilkan file masih sangat kuat.
TAPI .. ini didasarkan pada pemeriksaan ekstensi pada nama file URL! Anda tidak ingin mengutak-atik pemetaan ekstensi server karena Anda ingin mengirimkan file yang sama dengan dua cara berbeda. Jadi untuk unduhan, Anda dapat membodohinya dengan menautkan file ke nama yang buram pada pemetaan ekstensi ini, menunjuk ke sana, dan kemudian menggunakan fitur ganti nama unduhan untuk memperbaiki nama.
Anda dapat mengunduh dengan berbagai cara Anda dapat mengikuti cara saya. Meskipun file mungkin tidak diunduh karena izin 'boleh-popup' tidak disetel tetapi di lingkungan Anda, ini akan berfungsi dengan sempurna
Masalah dengan yang terakhir adalah bahwa itu akan terbuka di browser, tidak ditawarkan untuk mengunduh dan menyimpan.
Pekka
9
Tidak akan bekerja; browser akan memperlakukannya sebagai tautan relatif ke ./www.example.com/name.jpg- Anda harus menggunakan http://tautan absolut dengan domain yang ditentukan.
Delan Azabani
-7
saya tahu saya terlambat tetapi ini yang saya dapatkan setelah 1 jam pencarian
<?php
$file ='file.pdf';if(! file){die('file not found');//Or do something }else{if(isset($_GET['file'])){// Set headers
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");// Read the file from disk
readfile($file);}}?>
dan untuk tautan yang dapat diunduh saya melakukan ini
Ini mengerikan. Ketika saya melihat tautan unduhan seperti itu, saya harus menahan keinginan untuk mencoba index.php? File = index.php yang dalam implementasi copy / paste kode Anda pada akhirnya akan memberikan orang jahat akses ke database Anda dan siapa yang tahu apa.
M. Strtr
1
Ide buruk. Pertama, karena Anda membuat server Anda berfungsi lebih dari yang diperlukan. Kedua, karena pengguna dapat mengunduh file apa pun: p
Jawaban:
Jika dengan "tautan unduhan" yang Anda maksud adalah tautan ke suatu file untuk diunduh, gunakan
yang
target=_blank
akan membuat jendela browser baru muncul sebelum download dimulai. Jendela itu biasanya akan ditutup ketika browser menemukan bahwa sumber daya adalah unduhan file.Perhatikan bahwa jenis file yang dikenal oleh browser (mis. Gambar JPG atau GIF) biasanya akan dibuka di dalam browser.
Anda dapat mencoba mengirim tajuk yang tepat untuk memaksa unduhan seperti yang dijelaskan misalnya di sini . (skrip sisi server atau akses ke pengaturan server diperlukan untuk itu.)
sumber
Di browser modern yang mendukung HTML5, berikut ini dimungkinkan:
Anda juga dapat menggunakan ini:
Ini akan memungkinkan Anda untuk mengubah nama file yang sebenarnya sedang diunduh.
sumber
Selain itu (atau sebagai pengganti)
<a download
atribut HTML5 yang telah disebutkan, unduhanperamban ke perilaku disk juga dapat dipicu oleh tajuk tanggapan http berikut:
Ini adalah cara yang harus dilakukan sebelum HTML5 (dan masih berfungsi dengan browser yang mendukung HTML5).
sumber
download
atributTautan unduhan akan menjadi tautan ke sumber daya yang ingin Anda unduh. Ini dibangun dengan cara yang sama dengan tautan lainnya:
sumber
Untuk menautkan file, lakukan hal yang sama seperti tautan halaman lainnya:
Untuk memaksa sesuatu untuk mengunduh walaupun mereka memiliki plugin yang disematkan (Windows + QuickTime = ugh), Anda dapat menggunakan ini di htaccess / apache2.conf Anda:
sumber
Utas ini mungkin sudah kuno sekarang, tetapi ini berfungsi dalam html5 untuk file lokal saya.
Untuk pdf:
<p><a href="file:///........example.pdf" download target="_blank">test pdf</a></p>
Ini harus membuka pdf di windows baru dan memungkinkan Anda untuk mengunduhnya (setidaknya di firefox). Untuk file lain, cukup buat nama file. Untuk gambar dan musik, Anda ingin menyimpannya di direktori yang sama dengan situs Anda. Jadi itu akan seperti
sumber
Atribut unduhan tidak berfungsi di IE, itu mengabaikan "unduhan" sepenuhnya. Pengunduhan tidak berfungsi di Firefox jika href menunjuk ke situs jarak jauh. Jadi contoh Odin tidak berfungsi di Firefox 41.0.2.
sumber
Ada satu lagi kehalusan yang dapat membantu di sini.
Saya ingin memiliki tautan yang memungkinkan pemutaran dan tampilan di dalam peramban serta satu untuk diunduh murni. Atribut unduhan baru baik-baik saja, tetapi tidak berfungsi sepanjang waktu karena paksaan browser untuk memutar atau menampilkan file masih sangat kuat.
TAPI .. ini didasarkan pada pemeriksaan ekstensi pada nama file URL! Anda tidak ingin mengutak-atik pemetaan ekstensi server karena Anda ingin mengirimkan file yang sama dengan dua cara berbeda. Jadi untuk unduhan, Anda dapat membodohinya dengan menautkan file ke nama yang buram pada pemetaan ekstensi ini, menunjuk ke sana, dan kemudian menggunakan fitur ganti nama unduhan untuk memperbaiki nama.
Saya berharap hanya melempar pertanyaan tiruan di akhir atau mengaburkan ekstensi akan bekerja, tetapi sayangnya, tidak.
sumber
Atribut unduhan baru untuk
<a>
tag dalam HTML5<a href="http://www.odin.com/form.pdf" download>Download Form</a>
atau
<a href="http://www.odin.com/form.pdf" download="Form">Download Form</a>
Saya lebih suka yang pertama lebih disukai sehubungan dengan ekstensi apa pun.
sumber
Anda dapat mengunduh dengan berbagai cara Anda dapat mengikuti cara saya. Meskipun file mungkin tidak diunduh karena izin 'boleh-popup' tidak disetel tetapi di lingkungan Anda, ini akan berfungsi dengan sempurna
satu lagi yang ini juga akan gagal karena 'X-Frame-Options' ke 'sameorigin'.
sumber
Seperti ini
Jadi file name.jpg di situs example.com akan terlihat seperti ini
sumber
./www.example.com/name.jpg
- Anda harus menggunakanhttp://
tautan absolut dengan domain yang ditentukan.saya tahu saya terlambat tetapi ini yang saya dapatkan setelah 1 jam pencarian
dan untuk tautan yang dapat diunduh saya melakukan ini
sumber