• a要素のdownload属性は保存用ファイルへのリンクと提案するファイル名を示す

a要素のdownload属性は保存用ファイルへのリンクと提案するファイル名を示す

公開日: 執筆:佐藤

a要素のdownload属性は、リンク先を画面で開くのではなく、後で使うファイルとして保存させたい場合に使います。属性の値には、保存時に提案するファイル名を書けます。

ただし、download属性はファイルを生成する機能でも、閲覧権限を制限する機能でもありません。リンク先の用意、HTTP応答、別originから配信する場合の扱いを分けて設計してください。

hrefへ保存するファイルのURLを書く

W3CのHTML5 Recommendationでは、download属性を、リンク先のresourceがすぐに表示するものではなく、後で使うためにdownloadするものだと示す属性として定めています。

次は、自社site内にあるPDFを保存用リンクにする説明用の仮例です。

<a href="/files/service-guide.pdf" download>
  サービス案内を保存する
</a>

保存対象はhrefで決まります。downloadだけを書いても、PDFや画像は作られません。リンク文には「こちら」ではなく、何を保存するのかを書きます。

通常のページへ移動させたいリンクに、見た目をそろえるためだけにdownloadを付けないでください。ページを読む操作と、ファイルを端末へ残す操作は、利用者にとって別の行動です。

属性の値は保存時のファイル名を提案する

downloadへ値を入れると、ローカルファイルとして保存するときの既定名を提案できます。

<a href="/files/guide.php?id=42" download="service-guide-2015.pdf">
  サービス案内を保存する
</a>

この仮例では、配信URLがguide.php?id=42でも、保存名としてservice-guide-2015.pdfを提案します。空のdownload属性なら、保存名はURLやHTTP応答などを基にuser agentが決めます。

属性値は確定したファイル名ではありません。利用者の環境で使えない記号は、user agentが調整することがあります。拡張子も含め、配信する内容と一致する分かりやすい名前を指定してください。

Content-Dispositionをサーバー側の指示として扱う

ファイルのHTTP応答にContent-Dispositionがあり、attachmentとファイル名が指定されている場合は、その応答が保存方法とファイル名の判断に使われます。HTMLだけを編集できる担当者と、サーバーのheaderを設定する担当者が異なるなら、両方の指定を確認します。

たとえば、会員画面で生成するPDFや、URLから種類を判別しにくいファイルでは、サーバー側で次のような応答を返す方法があります。

Content-Disposition: attachment; filename="service-guide-2015.pdf"
Content-Type: application/pdf

download属性の提案名と、Content-Dispositionのファイル名を別々に変更すると、同じファイルに複数の名前が生まれます。名称の正本を決め、HTMLとサーバー設定を一緒に確認してください。

別originのファイルは属性だけで判断しない

リンク元と保存対象が別originにある場合、HTML5の仕様は、download属性とContent-Disposition: attachmentを組み合わせるよう求めています。利用者が意図しない別siteの情報を保存させられる危険を避けるためです。

外部のファイル配信サービスや別domainの保管先を使うなら、次の三者を分けて確認します。

確認対象 確認する内容
リンク元のHTML hrefとdownloadの値
配信先のHTTP応答 Content-Disposition、Content-Type、HTTP status
利用者の操作 対象browserで開くのか保存するのか、提案名が何になるのか

browserごとの動作を推測で決めず、実際の配信URLで試します。特定のbrowserだけを前提にする場合も、対象と確認結果を記録してください。

保存リンクと公開制御を分ける

download属性を付けても、URLを知る人からファイルを隠すことはできません。公開してよい資料か、認証が必要な資料かは、配信前にサーバー側で判断します。

制作を委託する場合は、ファイルの保管場所、公開範囲、配信header、表示するリンク文、保存名、差し替え担当を引き渡し条件にします。HTMLの実装を任せても、どの資料を誰へ配信するかを決める責任はsite側に残ります。

最初の一手は、保存させたいファイルを一件選び、実際のURLとHTTP応答を確認することです。同じoriginならdownloadを付けて保存名を試し、別originなら配信側のContent-Dispositionまで確認してください。

戻る