HTML'de indirme bağlantısını nasıl oluşturabilirim?


224

Temel bir HTML fikrim var. Örnek web sitemde indirme bağlantısı oluşturmak istiyorum, ancak nasıl oluşturulacağı hakkında bir fikrim yok. Bir dosyayı ziyaret etmek yerine indirmek için nasıl bağlantı kurabilirim?


11
Bu soru için kabul işareti değiştirilmelidir.
Pekka

Yanıtlar:


163

Bu cevap eski. Biz şimdi sahip downloadniteliği . (ayrıca bu MDN bağlantısına bakın )

"İndirme bağlantısı" ile indirilecek bir dosyaya bağlantı kastediyorsanız,

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

target=_blankİndirme işlemi başlamadan önce yeni bir tarayıcı penceresi görünür hale getirir. Tarayıcı genellikle kaynağın bir dosya indirme olduğunu fark ettiğinde bu pencere kapatılır.

Tarayıcı tarafından bilinen dosya türlerinin (örn. JPG veya GIF görüntüleri) genellikle tarayıcıda açılacağını unutmayın.

Burada açıklandığı gibi indirmeyi zorlamak için doğru başlıkları göndermeyi deneyebilirsiniz . (bunun için sunucu tarafı komut dosyaları veya sunucu ayarlarına erişim gerekir.)


1
download özniteliğini neden kullanmıyorsunuz, jpg gibi bir dosya alırsanız, sadece açmak yerine indirir.
Ben

2
IE'de çalışmadığından lütfen "target = '_ blank'" parametresini atlayın. Test ettin mi?
Tara

4
@Dudeson lütfen "işe yaramayacak" ve hangi IE sürümlerinden bahsettiğinizi belirtin. (Şimdi TIIUNDER'ın aşağıda daha yeni cevaplarını tarif eden yaklaşımı kullanmak güvenlidir. Kabul işaretini almalıdır.)
Pekka

2
@Sergiu cevap yedi yaşında. Bunu silemiyorum ve asker kabul işaretini değiştirme
Pekka

1
@Dani, şimdi doğru olan TIIUNDER'ın cevabına bakınız.
Pekka

455

HTML5'i destekleyen modern tarayıcılarda aşağıdakiler mümkündür:

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

Bunu da kullanabilirsiniz:

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

Bu, gerçekten indirilmekte olan dosyanın adını değiştirmenize izin verecektir.


i PFD dosyasını indirmek için aynı kodu kullandım ve tüm tarayıcılarda test edildi, ancak safari'de bu kod yeni sekmede açık pdf dosyasını indirmek yerine safari çalışmıyor.
Renh Khunt

6
caniuse.com/#search=download%20attribute Internet Explorer ve Safari'de değil Chrome, Edge, Firefox, Opera ve en son Android 4.4+ tarayıcılarda çalışır.
Bart Verkoeijen

Bağlantıyı bir düğme tıklamasıyla dinamik olarak oluşturuyorsam bunu nasıl yapabilirim?
Nongthonbam Tonthoi

1
Tonthoi, href'i dinamik olarak bir etikete atamak için javascript kullanamazsınız
akshay kishore

1
Aynı orijinli URL'lerle sınırlı olduğu için bu mutlaka işe yaramaz.
Nathan

22

HTML5'in daha <a downloadönce belirtilen özelliğine ek olarak (veya bunun yerine)
, tarayıcının disk davranışına indirmesi aşağıdaki http yanıt başlığı tarafından da tetiklenebilir:

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

Bu, HTML5'ten önce yapmanın yoluydu (ve yine de HTML5'i destekleyen tarayıcılarla çalışıyor).


4
Ancak bu bir sunucu tarafı uygulaması gerektirir, değil mi?
Lombas

@Lombas evet, yalnızca sunucu http yanıt üstbilgilerini ayarlayabilir.
Myobis

Bu tam cevap mı? Ayrıca, bir İçerik Türü üstbilgisi göndermeniz ve indirmeyi zorlamak için dosyayı okumalısınız. Cevabınızı isteyebilir. Tam cevap burada: stackoverflow.com/a/1465631/2757916 .
Govind Rai

Bu, sunucu tarafı uygulaması için mükemmeldir, sadece içerik türünü de kesin. downloadözellik ile karşılaştırıldığında iyi desteklenmektedir
william.eyidi

9

İndirme bağlantısı, indirmek istediğiniz kaynağın bağlantısı olacaktır. Başka herhangi bir bağlantının yapılacağı şekilde inşa edilmiştir:

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

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

8

Dosyaya bağlanmak için diğer sayfa bağlantılarıyla aynı işlemi yapın:

<a href="...">link text</a>

Yerleşik bir eklentisi olsa bile (Windows + QuickTime = ugh) bir şeyleri indirmeye zorlamak için bunu htaccess / apache2.conf dosyasında kullanabilirsiniz:

AddType application/octet-stream EXTENSION

Teşekkürler! bu çok daha basit ve sunucu çapında! : DI biraz daha ayrıntılı olan bu bağlantıyı buldu. Teşekkür ederim. htaccess-guide.com/adding-mime-types
Joe DF

Bu, bu türdeki tüm dosyaların yalnızca indirilmesini sağlayacaktır. İstediğiniz buysa iyi, ancak unutursanız ve bu türden başka bir dosyanın indirmek yerine tarayıcıda görüntülenmesini isterseniz uyumlara neden olabilir.
TecBrat

4

Bu iş parçacığı muhtemelen eski, ama bu benim yerel dosya için html5 çalışır.

PDFS için:

<p><a href="file:///........example.pdf" download target="_blank">test pdf</a></p>

Bu, pdf'yi yeni bir pencerede açmalı ve indirmenize izin vermelidir (en azından firefox'ta). Başka herhangi bir dosya için, dosya adı yapmanız yeterlidir. Resimler ve müzik için bunları sitenizle aynı dizinde saklamak istersiniz. Yani böyle olurdu

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

2

İndirme özelliği IE'de çalışmaz, "indir" i tamamen yok sayar. Href uzak bir siteyi gösteriyorsa indirme Firefox'ta çalışmaz. Odin'in örneği Firefox 41.0.2'de çalışmaz.


1

Burada yardımcı olabilecek bir incelik daha var.

Hem tarayıcı içi oynatmaya hem de görüntülemeye izin veren bağlantıların yanı sıra tamamen indirmek için bir bağlantıya sahip olmak istiyorum. Yeni indirme özelliği iyidir, ancak her zaman çalışmaz, çünkü tarayıcının dosyayı oynatmak veya görüntülemek için zorlaması hala çok güçlüdür.

AMA .. Bu, URL'nin dosya adındaki uzantıyı incelemeye dayanır! Aynı dosyayı iki farklı yolla sunmak istediğiniz için sunucunun uzantı eşlemesiyle uğraşmak istemezsiniz. Bu nedenle, indirme için, dosyayı bu uzantı eşlemesine opak olan bir ada yumuşak bir şekilde bağlayarak, işaret ederek ve ardından adı düzeltmek için indirmenin yeniden adlandırma özelliğini kullanarak kandırabilirsiniz.

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

Sadece sonunda bir kukla sorgu atma ya da uzatma işe yarayacak başka türlü umuyordu, ama ne yazık ki, değil.


0

İndirme özelliği <a>HTML5'teki etiket için yeni

<a href="http://www.odin.com/form.pdf" download>Download Form</a>
veya
<a href="http://www.odin.com/form.pdf" download="Form">Download Form</a>

Herhangi bir uzantıya göre tercih edilen ilkini tercih ederim.


0

Yolumu takip edebileceğiniz çeşitli şekillerde indirebilirsiniz. 'İzin verilen pop-up'lar' izni nedeniyle dosyalar indirilmese de, ortamınızda bu mükemmel bir şekilde çalışır

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

diğeri de 'X-Frame-Options' nedeniyle 'sameorigin' nedeniyle başarısız olacaktır.

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


-3

Bunun gibi

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

Yani example.com sitesindeki bir name.jpg dosyası şöyle görünecektir

<a href="www.example.com/name.jpg">Image</a>

İkincisi ile ilgili sorun tarayıcıda açılacak, indirme ve kaydetme için teklif edilmemesidir.
Pekka

9
Çalışmayacak; tarayıcı bunu göreli bir bağlantı olarak ele alacaktır ./www.example.com/name.jpg- http://belirtilen etki alanına sahip mutlak bağlantılar için kullanmalısınız .
Delan Azabani

-7

geç kaldığımı biliyorum ama aramadan 1 saat sonra aldığım şey bu

 <?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); }
    }

    ?>

ve indirilebilir bağlantı için bunu yaptım

<a href="index.php?file=file.pdf">Download PDF</a>

6
Bu korkunç. Böyle bir indirme bağlantısı gördüğümde, kodunuzun bir kopyala / yapıştır uygulamasında sonunda kötü niyetli bir kişinin veritabanınıza erişmesini ve kimin ne olduğunu bilmesi için index.php?
M.Stramm

1
Kötü bir fikir. Birincisi, çünkü sunucunuzu gereğinden fazla çalıştırıyorsunuz. İkinci olarak, kullanıcılar herhangi bir dosyayı indirebildikleri için: p
José Neto
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.