如何在HTML中创建下载链接?


224

我有HTML的基本概念。我想在示例网站中创建下载链接,但是我不知道如何创建它。我该如何链接才能下载文件而不是访问文件?


11
此问题的接受标记应切换。
佩卡2014年

Answers:


163

这个答案已经过时了。现在,我们有了download属性。(另请参见指向MDN的链接

如果“下载链接”是指要下载文件的链接,请使用

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

target=_blank将下载开始之前,新的浏览器窗口出现。当浏览器发现资源是文件下载时,通常会关闭该窗口。

请注意,浏览器已知的文件类型(例如JPG或GIF图像)通常会在浏览器中打开。

您可以尝试发送正确的标题,以强制进行下载,例如此处概述。(为此,需要服务器端脚本或访问服务器设置。)


1
为什么不使用download属性,如果您获得jpg之类的文件,它将下载而不仅仅是打开。
2014年

2
请省略“ target ='_ blank'”,因为在IE中无法使用。你甚至测试过吗?
塔拉2014年

4
@Dudeson请指定您在说什么“不起作用”以及哪个版本的IE。(不过,现在可以安全地使用下面描述的TIIUNDER最近更新的方法。它应该获得认可。)
Pekka 2014年

2
@Sergiu的答案是七岁。我无法删除它,而问询者也未响应我切换接受标记的请求……我们无能为力,尽管我将添加指向最新答案的链接
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浏览器,但该代码无法在Safari浏览器中使用,而是下载pdf文件(在新标签页中打开)。
Renish Khunt 2015年

6
caniuse.com/#search=download%20attribute在Chrome,Edge,Firefox,Opera和最新的Android 4.4+浏览器中起作用,而在Internet Explorer和Safari中不起作用。
Bart Verkoeijen '16

如果在单击按钮时动态创建链接,该怎么办?
翁通巴姆·通索伊,2017年

1
@NongthonbamTonthoi您不能使用JavaScript动态地将href分配给a标签
akshay kishore

1
这不一定有效,因为它限于同源URL。
内森

22

除了(或替代)<a download已提到的HTML5 属性外,
浏览器的下载到磁盘的行为也可以由以下http响应标头触发:

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

这是在HTML5之前执行的方法(并且仍可用于支持HTML5的浏览器)。


4
但这需要服务器端实现,对吗?
隆巴斯2015年

@Lombas是的,只有服务器可以设置http响应标头。
Myobis

这是完整的答案吗?您还需要发送一个Content Type标头并读取文件以强制下载。可能想要和那样回答。完整答案在这里:stackoverflow.com/a/1465631/2757916
Govind Rai

这对于服务器端实现是完美的,只需精确的内容类型。与download属性相比,它得到了很好的支持
william.eyidi

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

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

download属性在IE中不起作用,它会完全忽略“下载”。如果href指向远程站点,则下载在Firefox上不起作用。因此,Odin的示例在Firefox 41.0.2上不起作用。


1

还有另一种微妙之处可以在这里提供帮助。

我想拥有既允许浏览器内播放又可以显示的链接,以及一个纯粹用于下载的链接。新的download属性很好,但并非一直有效,因为浏览器播放或显示文件的强迫性仍然很高。

但是..这是基于检查URL的文件名的扩展名的。您不想摆弄服务器的扩展名映射,因为您希望通过两种不同的方式传递相同的文件。因此,对于下载,您可以通过将文件软链接到对该扩展名映射不透明的名称,然后指向它,然后使用下载的重命名功能来修复该名称,从而使其蒙上阴影。

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

另一个由于“ 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>

后者的问题在于它将在浏览器中打开,而不提供下载和保存。
Pekka 2010年

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

1
馊主意。首先,因为您使服务器的工作超出了必要。其次,因为用户可以下载任何文件:对
何塞·内托
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.