这很疯狂,但我不知道如何做到这一点,而且由于这些词有多常见,很难在搜索引擎上找到我需要的东西 . 我认为这应该很容易回答 .
我想要一个简单的文件下载,它会像这样做:
<a href="file.doc">Download!</a>
但我想使用HTML按钮,例如其中任何一个:
<input type="button" value="Download!">
<button>Download!</button>
同样,是否可以通过JavaScript触发简单下载?
$("#fileRequest").click(function(){ /* code to download? */ });
我绝对不是在寻找一种方法来创建一个看起来像按钮的锚,使用任何后端脚本,或者混淆服务器头或mime类型 .
18 回答
对于你可以做的按钮
我认为这是您正在寻找的解决方案
我讨厌我的Javascript生成CSV文件的情况 . 由于没有可下载的远程URL,我使用以下实现 .
你可以使用隐形iframe的“技巧”来做到这一点 . 当您为其设置“src”时,浏览器会做出反应,就像您单击具有相同“href”的链接一样 . 与表单解决方案相反,它使您能够嵌入其他逻辑,例如在超时后激活下载,满足某些条件等 .
它也很简单,没有像使用
window.open
时那样闪烁的新窗口/标签 .HTML:
使用Javascript:
您可以隐藏下载链接并使按钮单击它 .
我做了一些研究,找到了最好的答案 . 您可以使用新的HTML5
download
属性触发下载 .地点:
path_to_file
是绝对路径或相对路径,proposed_file_name
要保存的文件名(可以为空,则默认为实际文件名) .希望这有用 .
Whatwg Documentation
Caniuse
HTML:
旧线程,但它缺少一个简单的js解决方案:
这是最终为我工作的,因为在加载页面时确定要下载的文件 .
JS更新表单的action属性:
调用JS来更新表单的action属性:
使用提交按钮的表单标记:
以下做了 NOT 工作:
对我而言,按钮而不是锚文本的效果非常好 .
大多数规则可能都不行,但它看起来还不错 .
关于什么:
如果你不能使用表格,那么downloadjs的另一种方法很合适 . Downloadjs使用blob和html 5文件API:
{downloadjs(url,filename)})/>
*它是jsx / react语法,但可以在纯HTML中使用
Bootstrap Version
记录了in Bootstrap 4 docs,并且也在Bootstrap 3中工作 .
使用jQuery:
在
<body>
和</body>
标签之间的任何位置,使用以下代码放入按钮:这肯定有效!
如果你使用
<a>
标签,不要忘记使用通往文件的整个网址 - 即:如果您正在寻找一个vanilla JavaScript(没有jQuery)解决方案而且没有使用HTML5属性,那么您可以试试这个 .
它似乎不适用于Safari,但它确实在Chrome中有效 . 此外,一旦用户点击它,更改链接的href属性似乎使其在旧版本的IE中工作,但在最新版本的IE或Edge中不起作用 .
如果您有一个复杂的URL(例如
file.doc?foo=bar&jon=doe
),另一种方法是在表单中添加隐藏字段启发@Cfreak的答案是不完整的