文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

javascript下载文件几种方式,接收后台返回流下载或直接下载文件

2023-09-16 05:57

关注

目录

1 javascript下载文件7中方式

1.1 window.location.href下载

1.2 window.location下载

1.3 iframe下载

1.4 form表单的形式下载

1.5 a标签的方式下载

1.6 ajax方式后台返回文件流下载

1.7 axios方法后台返回流方式下载

 2.完整源码

1.1 window.location.href下载

function btn1() {debugger;window.location.href = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";}

1.2 window.location下载

function btn2() {debugger;window.location='http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile';}

1.3 iframe下载

function btn3() {try {var elementIF = document.createElement("iframe");elementIF.src = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";elementIF.style.display = "none";document.body.appendChild(elementIF);}catch(error) {console.log(error);}}

1.4 form表单的形式下载

function btn4() {const url = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";var form = $("
");form.attr("style", "display:none");form.attr("target", "_self");form.attr("method", "get");form.attr("action", url);$("body").append(form);// 提交form.submit();}

1.5 a标签的方式下载

function btn5() {const fileName = "Benjamin_Download_Test_File.pdf";const url = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";var a = document.createElement("a");a.download = fileName;a.href = url;// 修复firefox中无法触发click$("body").append(a)a.click();$(a).remove();}

1.6 ajax方式后台返回文件流下载

function btn6() {debugger;const url = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";$.ajax({url: url,type: 'get',data: {},contentType: 'application/json;charset=utf-8',// 指定服务器返回的类型,因为我们要返回文件流,所以类型为二进制数据dataType: 'binary',// 原生XMLHttpRequest 的属性,设置响应类型为blob,接收文件流xhrFields: {responseType: 'blob'},success: function(result, status, xhr) {const fileName = "Benjamin_Download_Test_File_20221225.pdf";// 可通过XMLHttpRequest对象,获取响应头                console.log(xhr);// 浏览器兼容 参数Blob类型                const downloadURL = (window.URL || window.webkitURL).createObjectURL(result);// 创建a标签var a = document.createElement('a');// 下载后文件的名字a.download = fileName;a.href = downloadURL;document.body.appendChild(a);a.click();setTimeout(function () {                    // 移除内存中的临时文件路径和为下载而创建的a标签                    URL.revokeObjectURL(downloadURL);                    a.remove();                }, 10000);},error: function (xhr, textStatus, errorMessage) {                // 从响应头中获取异常信息,如果包含中文的话会乱码因此 后台URLEncoder.encode() + 前台decodeURIComponent() 防止乱码                const errorInfo = decodeURIComponent(xhr.getResponseHeader("errorInfo"));                // 对错误信息进行打印                console.log(errorInfo);            }});}

1.7 axios方法后台返回流方式下载

function btn7() {debugger;const url = "http://127.0.0.1:6767/file/download/service/flower/beetl/downloadFile";const fileName = "Benjamin_Download_Test_File_20221225.pdf";this.axios.get(url, {responseType: 'blob'}).then(response => {// 创建a标签let a = document.createElement("a");a.download = fileName;// 创建二进制对象const blob = new Blob([response.data]);const downloadURL = (window.URL || window.webkitURL).createObjectURL(blob);a.href = downloadURL;// 模拟点击a.click();//释放资源并删除创建的a标签            URL.revokeObjectURL(downloadURL);// a.hrefdocument.body.removeChild(a);}).catch(error => { console.log(error);});}

下载按钮: 

 都可以成功下载:

后台简单源码:

@RestController@RequestMapping("/flower/beetl")@CrossOriginpublic class BeetlController {    @GetMapping(value = "/downloadFile")    public void downloadFile(HttpServletResponse httpServletResponse) {        File file = new File("C:\\Users\\admin\\Desktop\\download\\Benjamin_Download_Test_File.pdf");        InputStream is = null;        OutputStream os = null;        try {            is = new FileInputStream(file);            os = httpServletResponse.getOutputStream();            httpServletResponse.setContentType("application/octet-stream");            httpServletResponse.setHeader("Content-Disposition", "attachment;fileName=Benjamin_Download_Test_File.pdf");            int len = 0;            byte[] bytes = new byte[1024];            while ((len = is.read(bytes)) != -1) {                os.write(bytes, 0, bytes.length);                os.flush();            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                is.close();            } catch (IOException e) {                e.printStackTrace();            }            try {                os.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

 html页面源码:

        7中下载方式














来源地址:https://blog.csdn.net/m0_48983233/article/details/128438212

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯