HTMLでダウンロードリンクを作成するにはどうすればよいですか?


224

HTMLの基本的な考え方があります。サンプルWebサイトにダウンロードリンクを作成したいのですが、作成方法がわかりません。ファイルにアクセスするのではなく、ファイルをダウンロードするリンクを作成するにはどうすればよいですか?


11
この質問の承認マークを切り替える必要があります。
Pekka、2014

回答:


163

この回答は古くなっています。これでdownload属性ができました。(MDNへのこのリンクも参照してください)

「ダウンロードリンク」とは、ダウンロードするファイルへのリンクを意味する場合は、

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

これによりtarget=_blank、ダウンロードが始まる前に新しいブラウザウィンドウが表示されます。ブラウザがリソースがファイルのダウンロードであることを検出すると、通常、そのウィンドウは閉じられます。

ブラウザが認識しているファイルタイプ(JPGまたはGIF画像など)は通常、ブラウザ内で開かれることに注意してください。

ここに概説されているように、正しいヘッダーを送信してダウンロードを強制することができます。(そのためには、サーバー側スクリプトまたはサーバー設定へのアクセスが必要です。)


1
download属性を使用しないでください。jpgなどのファイルを取得した場合、ファイルを開くだけでなくダウンロードします。
ベン

2
「target = '_ blank'」はIEでは機能しないため、省略してください。あなたもそれをテストしましたか?
Tara

4
@Dudesonは、「動作しない」ものと、どのバージョンのIEについて話しているのかを指定してください。(ただし、TIIUNDERの以下のはるかに新しい回答で説明されているアプローチを使用しても安全です。承認マークを取得する必要があります。)
Pekka

2
@Sergiu答えは7歳です。私はそれを削除することができず、質問者は受け入れマークを切り替える要求に応答しませんでした...私たちにできることはありませんが、より
Pekka

1
@Daniは以下のTIIUNDERの回答を参照してください。これは現在正しい回答です。
Pekka

455

HTML5をサポートする最新のブラウザーでは、次のことが可能です。

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

これを使用することもできます:

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

これにより、実際にダウンロードされるファイルの名前を変更できます。


私は同じコードを使用してPFDファイルをダウンロードし、すべてのブラウザーでテストしましたが、すべてサポートですが、Safariではこのコードは、PDFファイルをダウンロードして新しいタブで開く代わりに、Safariで機能しません。
Khuntを2015

6
caniuse.com/#search=download%20attribute Chrome、Edge、Firefox、Operaおよび最新のAndroid 4.4以降のブラウザーで機能し、Internet ExplorerおよびSafariでは機能しません。
Bart Verkoeijen 2016

ボタンをクリックして動的にリンクを作成する場合、どうすればよいですか?
Nongthonbam Tonthoi 2017年

1
@NongthonbamTonthoiは、javascriptを使用してhrefをタグに動的に割り当てることができない
akshay kishore

1
同じ生成元のURLに制限されているため、これは必ずしも機能するとは限りません。
ネイサン

22

<a download前述のHTML5の属性に加えて(または代わりに)
、ブラウザーのディスクへダウンロード動作は、次のhttp応答ヘッダーによってトリガーすることもできます。

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

これはHTML5より前の方法でした(HTML5をサポートするブラウザーでも動作します)。


4
しかし、これにはサーバー側の実装が必要です。
ロンバス2015年

@Lombasはい、サーバーのみがhttp応答ヘッダーを設定できます。
Myobis 2015年

これは完全な答えですか?コンテンツタイプヘッダーを送信し、ファイルを読み取って強制的にダウンロードする必要もあります。それをあなたの答えにしたいと思うかもしれません。ここでの完全な回答:stackoverflow.com/a/1465631/2757916
Govind Rai

これはサーバー側の実装に最適で、コンテンツタイプも正確です。download属性と比較して十分にサポートされています
william.eyidi 2017年

9

ダウンロードリンクは、ダウンロードするリソースへのリンクになります。他のリンクと同じように構成されます。

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

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

8

ファイルにリンクするには、他のページリンクと同じようにします。

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

プラグインが組み込まれている場合でも(Windows + QuickTime = ugh)ダウンロードを強制するには、これをhtaccess / apache2.confで使用できます。

AddType application/octet-stream EXTENSION

ありがとう!これははるかに簡単で、サーバー全体に適用されます。:DIは、このリンクをもう少し詳しく説明しています。ありがとうございました。htaccess-guide.com/adding-mime-types
Joe DF

これにより、そのタイプのすべてのファイルのみがダウンロードされます。それが必要な場合は問題ありませんが、そのタイプの別のファイルをダウンロードせずにブラウザ内に表示することを忘れてしまった場合は、問題が発生する可能性があります。
TecBrat、2015

4

このスレッドはおそらく古くなっていますが、これはローカルファイルのhtml5で動作します。

PDFの場合:

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

これにより、PDFが新しいウィンドウで開き、(少なくともFirefoxで)ダウンロードできるようになります。その他のファイルの場合は、ファイル名にします。画像と音楽の場合は、サイトと同じディレクトリに保存する必要があります。だからそれは

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

2

ダウンロード属性はIEでは機能せず、「ダウンロード」を完全に無視します。hrefがリモートサイトを指している場合、ダウンロードはFirefoxでは機能しません。したがって、Odinの例はFirefox 41.0.2では機能しません。


1

ここで役立つ微妙な点がもう1つあります。

ブラウザ内での再生と表示の両方を可能にするリンクと、純粋にダウンロードするためのリンクが欲しい。新しいダウンロード属性は問題ありませんが、ブラウザでファイルを再生または表示したいという衝動が依然として非常に強いため、常に機能するとは限りません。

しかし、これはURLのファイル名の拡張子を調べることに基づいています!同じファイルを2つの異なる方法で配信したいので、サーバーの拡張子マッピングをいじる必要はありません。そのため、ダウンロードの場合は、この拡張マッピングに対して不透明な名前にファイルをソフトリンクし、それをポイントして、ダウンロードの名前変更機能を使用して名前を修正することで、ファイルをだますことができます。

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

最後にダミーのクエリをスローするか、拡張機能を難読化するとうまくいくことを望んでいましたが、残念ながらそれはできません。


0

<a>HTML5 のタグのダウンロード属性が新しくなりました

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

私は最初の方が任意の拡張子に関して好ましいです。


0

あなたは私の方法に従うことができるさまざまな方法でダウンロードすることができます。「allow-popups」権限が設定されていないためファイルがダウンロードされない可能性がありますが、ご使用の環境では、これは完全に機能します

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

もう1つは、「X-Frame-Options」が「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>


-3

このような

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

したがって、サイトexample.comのファイルname.jpgは次のようになります。

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

後者の問題は、ブラウザで開き、ダウンロードして保存するために提供されないことです。
ペッカ

9
動作しません。ブラウザはそれをへの相対リンクとして扱い./www.example.com/name.jpgます- http://指定したドメインの絶対リンクに使用する必要があります。
Delan Azabani、2010年

-7

私は遅れていることを知っていますが、これは1時間の検索後に得たものです

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

    ?>

そしてダウンロード可能なリンクのために私はこれをしました

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

6
これは酷い。このようなダウンロードリンクを見つけたとき、私はindex.php?file = index.phpを試してみたいという衝動に抵抗する必要があります。これは、コードのコピー/貼り付けの実装で、最終的に悪意のある人にデータベースへのアクセス権を与え、誰が何を知っているかを示します。
M.Stramm 2018年

1
悪いアイデア。まず、必要以上にサーバーを機能させるためです。第二に、ユーザーが任意のファイルダウンロードすることができますので、:P
ホセ・ネト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.