前端通过 Blob / a标签 / iframe的src属性 实现文件下载

本文介绍了前端实现文件下载的两种方法:一是利用Blob对象进行下载,适用于小文件,但大文件下载时速度较慢;二是通过iframe的src属性或a标签直接触发浏览器下载,提供更快的下载体验。
摘要由CSDN通过智能技术生成

1. 通过Blob下载

参考链接: 前端通过Blob实现文件下载
参考链接2 HTML5 File API 全介绍
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 Blob下载代码应用:

下载按钮

 <Button @click="downResult()" style="border: 1px solid">

调用的Blob下载方法

    // 下面的downResult是前端通过Blob实现文件下载,需要请求后台获取数据responseData, 但大文件的等待时间较长,现改为直接通过src下载
    downResult () {
   
      this.taskId = window.location.href.split('/').pop()
      this.taskLoading = true
      let id = parseInt(this.taskId)
      taskApi.downResult(id).then(responseData => {
   
        this.taskLoading = false
        this.$Message.success('运行结果获取成功,下载即将开始,请稍后……')
        let blob = new Blob([responseData], {
   type: 'application/zip'})
        let url = window.URL.createObjectURL(blob)
        console.log(url)
        this.download(url, '-result')
        window.URL.revokeObjectURL(url)
      })
    },
    download (url, text) {
   
      if (!url) {
   
        return
      }
      let link = document.createElement('a') // 创建
前端中,我们可以通过 XMLHttpRequest 或 Fetch API 向服务器发送请求来获取文件内容,并将其显示在页面中。 以下是一个使用 Fetch API 的示例代码: ```javascript fetch('/path/to/your/file') .then(response => response.blob()) // 将响应转换为 Blob 对象 .then(blob => { const url = URL.createObjectURL(blob); // 通过 Blob 对象创建 URL const iframe = document.createElement('iframe'); // 创建 iframe 元素 iframe.src = url; // 设置 iframesrc 属性为 URL document.body.appendChild(iframe); // 将 iframe 添加到页面中 }); ``` 其中,`/path/to/your/file` 是服务器上文件的路径。在服务器端,需要设置合适的响应头,使得浏览器能够正确地解析文件内容。例如,在使用 Java 开发 Web 应用程序时,可以使用 HttpServletResponse 对象的 setContentType 和 setHeader 方法来设置响应头: ```java String mimeType = getServletContext().getMimeType(filePath); response.setContentType(mimeType); response.setHeader("Content-Disposition", "inline; filename=\"" + fileName + "\""); ``` 其中,`getServletContext().getMimeType(filePath)` 方法可以根据文件路径获取文件的 MIME 类型。`Content-Disposition` 头指示浏览器如何处理响应体,`inline` 表示浏览器应该在页面中显示内容,而不是下载文件。 注意:在实际开发中,应该根据具体情况进行适当的修改和优化。例如,在处理大文件时,可以使用流式传输来避免内存溢出等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值