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?

Venkat
sumber
11
Tanda terima untuk pertanyaan ini harus dialihkan.
Pekka

Jawaban:

163

Jawaban ini sudah usang. Kami sekarang memiliki downloadatribut . (lihat juga tautan ini ke MDN )

Jika dengan "tautan unduhan" yang Anda maksud adalah tautan ke suatu file untuk diunduh, gunakan

  <a href="http://example.com/files/myfile.pdf" target="_blank">Download</a>

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.)

Pekka
sumber
1
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:

<a href="link/to/your/download/file" download>Download link</a>

Anda juga dapat menggunakan ini:

<a href="link/to/your/download/file" download="filename">Download link</a>

Ini akan memungkinkan Anda untuk mengubah nama file yang sebenarnya sedang diunduh.

Felix G.
sumber
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.
Renish Khunt
6
caniuse.com/#search=download%20attribute Bekerja di Chrome, Edge, Firefox, Opera dan browser Android 4.4+ terbaru, dan bukan di Internet Explorer dan Safari.
Bart Verkoeijen
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:

Content-Disposition: attachment; filename=ProposedFileName.txt;

Ini adalah cara yang harus dilakukan sebelum HTML5 (dan masih berfungsi dengan browser yang mendukung HTML5).

Myobis
sumber
4
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:

<a href="path to resource.name of file">Link</a>

<a href="files/installer.exe">Link to installer</a>
Oded
sumber
8

Untuk menautkan file, lakukan hal yang sama seperti tautan halaman lainnya:

<a href="...">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:

AddType application/octet-stream EXTENSION
Delan Azabani
sumber
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.

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

<p><a href="images/logo2.png" download>test pdf</a></p>
johan
sumber
2

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.

Bill Coffin
sumber
1

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.

<a target="_blank" download="realname.mp3" href="realname.UNKNOWN">Download it</a>
<a target="_blank" href="realname.mp3">Play it</a>

Saya berharap hanya melempar pertanyaan tiruan di akhir atau mengaburkan ekstensi akan bekerja, tetapi sayangnya, tidak.

jhhl
sumber
0

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.

Odin
sumber
0

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

<div className="col-6">
                    <a  download href="https://www.w3schools.com/images/myw3schoolsimage.jpg" >Test Download </a>
                </div>

satu lagi yang ini juga akan gagal karena 'X-Frame-Options' ke 'sameorigin'.

<a href="https://www.w3schools.com/images/myw3schoolsimage.jpg" download>
  <img src="https://www.w3schools.com/images/myw3schoolsimage.jpg" alt="W3Schools" width="104" height="142">
</a>

raja neo
sumber
-3

Seperti ini

<a href="www.yoursite.com/theThingYouWantToDownload">Link name</a>

Jadi file name.jpg di situs example.com akan terlihat seperti ini

<a href="www.example.com/name.jpg">Image</a>
Menipu
sumber
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

<a href="index.php?file=file.pdf">Download PDF</a>
Sikander
sumber
6
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
José Neto