前端下载问题

方式一:采用插件去做,在ts文件中引入download.jsdownload.js

import * as download from '../../../../assets/download/download.js';

downloadImg(){

var x=new XMLHttpRequest();
	x.open("GET", "http://danml.com/wave2.gif", true);
	x.responseType = 'blob';
	x.onload=function(e){download(x.response, "dlBinAjax.gif", "image/gif" ); }
	x.send()
}
 这样下载会遇到跨域问题,解决如下:
downloadIamg(imgUrl, imgName) {
    var x = new XMLHttpRequest();
    x.open("GET", imgUrl, true);
    // x.setRequestHeader("access-control-allow-headers", "Authorization,Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,X-Requested-By,If-Modified-Since,X-File-Name,X-File-Type,Cache-Control,Origin")
    // x.setRequestHeader("access-control-allow-methods", "GET,POST,OPTIONS,PUT,DELETE")
    x.setRequestHeader("Access-Control-Allow-Origin", "*")
    // x.setRequestHeader("access-control-expose-headers", "Authorization")
    x.setRequestHeader("Cache-Control","no-cache")
    x.responseType = 'blob';
    x.onload = function (e) { download(x.response, imgName + '.png', "image/png"); }
    x.send();
  }

方式二:采用XMLHttpRequest,把下面内容放入公共文件进行函数封装

let url = "";  // 要下载的文件地址
let type = 'octet-stream';
let xhr = new XMLHttpRequest();
xhr.open('get', url, true);
// 修改请求头,用户登录后返回的token值,根据项目需求可加可不加
xhr.setRequestHeader('Authorization', localStorage.getItem('Token'));
xhr.setRequestHeader('Content-Type', `application/${type}`);
xhr.responseType = "blob";
xhr.onload = function () {
    // status请求状态码,此函数是回调,可带参数
    if (this.status == 200) {
        // 接受二进制文件流
        var blob = this.response;
        let downloadElement = document.createElement('a');
        let href = blob;
        if (typeof blob == 'string') {
            downloadElement.target = '_blank';
        else {
            href = window.URL.createObjectURL(blob);        // 创建下载的链接
        }
        downloadElement.href = href;
        if(fileName){
            downloadElement.download = fileName;            // 下载后文件名
        }
                    
        document.body.appendChild(downloadElement);
        downloadElement.click();                            // 点击下载
        document.body.removeChild(downloadElement);         // 下载完成移除元素
        if (typeof blob != 'string') {
            window.URL.revokeObjectURL(href);               // 释放掉blob对象
        }
     }
}
xhr.send();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 前端 httpresponse 下载是指通过前端 JavaScript 代码,向服务器发起下载文件的请求,并将服务器响应的文件内容下载到本地电脑或手机等终端设备,实现文件下载功能。通常情况下,前端 httpresponse 下载可以使用浏览器原生支持的下载功能或者第三方 JavaScript 库来实现。 实现前端 httpresponse 下载的关键是要在服务端设置响应头部,指定响应内容的 MIME 类型以及文件名或附件名,例如: ``` response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=file.txt"); ``` 在前端 JavaScript 代码中,我们通常使用 XMLHttpRequest 或 fetch API 向服务器发起 GET 请求,获取响应数据流,然后通过创建 Blob 对象,并调用 URL.createObjectURL() 方法将数据流转换为可下载的 URL,最后利用浏览器原生支持的下载功能或者第三方 JavaScript下载文件,例如: ``` var xhr = new XMLHttpRequest(); xhr.open('GET', '/download/file.txt', true); xhr.responseType = 'blob'; xhr.onload = function() { if (this.status === 200) { var blob = new Blob([this.response], {type: 'application/octet-stream'}); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'file.txt'; document.body.appendChild(a); a.click(); } }; xhr.send(); ``` 以上就是前端 httpresponse 下载的简单介绍和实现方法,需要注意的是,在不同的浏览器和终端设备上,会有一些兼容性问题需要注意,可以尝试使用第三方 JavaScript 库如 FileSaver.js 来解决这些问题。 ### 回答2: 前端在遇到需要下载文件的情况下,通常会使用httpresponse下载。httpresponse是服务器响应客户端请求的一种方式。它能够将用户请求的文件以流的方式传输给客户端,从而实现文件下载。 在前端中,我们通常会使用fetch、axios等库发送请求。对于文件下载,我们需要设置响应类型为“blob”,然后通过URL.createObjectURL()创建一个临时的URL,将httpresponse中的文件流赋值给这个URL,再通过a标签的download属性将文件保存到本地。 在处理大文件下载时,我们可能需要使用分块下载。该技术可以将文件分成多个块,分块传输,从而避免一次性下载整个文件而导致的网络拥堵和内存占用过多的问题。 总之,前端httpresponse下载是常用的文件下载方式,通过设置正确的响应类型和处理流式传输的方式,可以很方便地实现文件下载功能。 ### 回答3: 前端的httpResponse下载就是通过浏览器向服务器发出请求获取文件资源,并将其下载到本地设备。常见的场景包括下载图片、文件、音频等等。 在实现这一功能时,前端需要使用到XMLHttpRequest对象来和服务器进行通信,并在服务器响应成功后获取下载地址。在获取到下载地址后,前端就可以使用a标签的download属性来实现文件的下载了。如果需要下载的文件非常大,前端可以选择使用Blob或Stream等方式进行文件的分段下载,这样可以避免因下载文件太大而导致浏览器失去响应。 还需要注意的是,由于浏览器的安全机制,通常情况下我们无法直接在ajax请求中实现文件的下载功能。因此,我们需要采用一些特别的技巧和手段来绕过浏览器的限制,比如使用iframe、form表单提交等方式实现文件的下载。这些方法虽然看起来不太优雅,但在实现文件下载这一功能上却非常有效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山为樽水为沼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值