这很疯狂,但我不知道怎么做,因为这些词太常见了,在搜索引擎上很难找到我需要的东西。我想这个问题应该很容易回答。

我想要一个简单的文件下载,这将与此相同:

<a href="file.doc">Download!</a>

但是我想使用一个HTML按钮,例如:

<input type="button" value="Download!">
<button>Download!</button>

同样,是否有可能通过JavaScript触发一个简单的下载?

$("#fileRequest").click(function(){ /* code to download? */ });

我绝对不会寻找一种方法来创建一个看起来像按钮的锚,使用任何后端脚本,或混乱的服务器头或mime类型。


当前回答

你可以用隐形iframe的“trick”来实现。当你将“src”设置为它时,浏览器的反应就像你点击了一个具有相同“href”的链接。与表单解决方案相反,它允许您嵌入额外的逻辑,例如在超时后激活下载,当某些条件满足时等等。

它也非常安静,没有闪烁的新窗口/标签时使用window.open。

HTML:

<iframe id="invisible" style="display:none;"></iframe>

Javascript:

function download() {
    var iframe = document.getElementById('invisible');
    iframe.src = "file.doc";
}

其他回答

引导程序版本

<a class="btn btn-danger" role="button" href="path_to_file"
   download="proposed_file_name">
  Download
</a>

在Bootstrap 4文档中有记录,并且在Bootstrap 3中也有工作。

你可以用隐形iframe的“trick”来实现。当你将“src”设置为它时,浏览器的反应就像你点击了一个具有相同“href”的链接。与表单解决方案相反,它允许您嵌入额外的逻辑,例如在超时后激活下载,当某些条件满足时等等。

它也非常安静,没有闪烁的新窗口/标签时使用window.open。

HTML:

<iframe id="invisible" style="display:none;"></iframe>

Javascript:

function download() {
    var iframe = document.getElementById('invisible');
    iframe.src = "file.doc";
}

jQuery:

$("#fileRequest").click(function() {
    // hope the server sets Content-Disposition: attachment!
    window.location = 'file.doc';
});

在<body>和</body>标签之间的任何地方,使用下面的代码放入一个按钮:

<button>
    <a href="file.doc" download>Click to Download!</a>
</button>

这一定有用!

如果你不能使用表单,另一种方法downloadjs很适合。Downloadjs在底层使用blob和html 5文件API:

<div onClick=(()=>{downloadjs(url, filename)})/>

*它是jsx/react语法,但可以在纯HTML中使用