使用JQuery开始下载文件

3

当我点击按钮时,想要开始文件下载。
我已经获得文件路径。
我该如何开始下载?
这是我迄今为止尝试过的:

$('#download_button').click(function(){

    var filepath = $(this).attr('data-filepath');
    var do = '<a href="'+ filepath +'" download="file">file</a>';
    $(body).append(do);
});

我做错了什么?
我从不想重定向页面。
如果客户端机器上安装了下载软件,文件是否在浏览器中开始下载还是在下载软件中开始下载。

4个回答

6

Alternatively you can also set the top.location

$('#download_button').click(function(){
    var filepath = $(this).attr('data-filepath');
    top.location.href = filepath;
});

我已经安装了IDM,但为什么文件没有在IDM中开始下载?相反,它开始在浏览器中下载。 - user3316523
我不确定为什么Internet Download Manager无法下载该文件。也许你可以确保按照Niet在他们的回答中提到的发送正确的头信息。 - Rob Schmuecker
这段代码在本地主机上运行良好,但在我的服务器上,当我点击下载按钮时,它会在浏览器中将完整文件作为文本打开。 - user3316523
这真的取决于您使用哪个后端来提供文件。请查看您服务器(如Apache/Tomcat等)上的“headers”和/或模块的文档,如果您正在使用PHP等脚本语言生成文件,请寻找具体的示例。 - Rob Schmuecker
top.location 是什么? - theonlygusti

3

在JavaScript中,你无法强制下载文件。

你可以使用location.href = "somefile.ext";,但是只有当服务器在对该文件请求的响应头中包含Content-Disposition: attachment时,它才会被下载。


你有什么建议?我已经尝试了location.href,但我的文件是带有自定义扩展名的XML文件。因此,当我点击按钮时,它不是开始下载,而是在浏览器中显示完整的文件文本。 - user3316523
配置您的服务器,使其针对具有自定义扩展名的文件发送“Content-Disposition: attachment”头。 - Niet the Dark Absol
我该如何做到这一点? - user3316523
取决于您的服务器。 - Niet the Dark Absol

1
如果您想将文件下载到客户端,请执行以下操作:
$('#download_button').click(function(){
    var filepath = $(this).attr('data-filepath');
    location.href = filepath;
});

location.href会寻找一个页面,但是它找不到任何内容,所以它会下载文件。


我尝试了你的代码,它打开了一个新窗口,然后关闭了它并提示下载。 - user3316523

0
你可以使用jQuery创建一个表单并使用submit函数。这不会改变地址栏中的URL。
$('#download_button').click(function(){

        var filepath = $(this).attr('data-filepath');
        var form = $('<form>').attr('action', filepath);
        form.submit();
});

使用MVC在服务器上对我而言运行得非常完美。请尝试为表单指定HTTP方法,根据您使用的方法将$('<form>')更改为$('<form method="GET">')或$('<form method="POST">')。还要确保文件路径是可访问的。 - Oday Fraiwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接