【前端文件下载】直接下载和在浏览器显示下载进度的下载方法_java 前端a标签下载,要文件传输完了才会显示下载信息(1)

最后

其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)

《前端开发四大模块核心知识笔记》

最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

文件下载方法

之前做下载文件遇到了点问题, 就趁此机会总结一下前端下载文件的方法:

  1. 如果是浏览器支持的类型, 那么打开的话是一个preview操作, 那么针对浏览器不支持预览的类型, 如果打开的话就会进行下载操作

a. 地址栏直接输入URL
b. window.location.href = URL
c. window.open(URL)
2. 使用a标签来下载, 利用a标签的download属性, 并且可以自定义下载文件的名称
也可以直接通过js来创建一个a标签, 然后放入body里, 触发其点击事件来下载, 下载过后remove即可

<a href="/xx/xxx.jpg" download="fileName">

  1. 通过XMLHttpRequest下载
    缺点: 此方法是下载完毕之后才在浏览器左下角弹出对应的文件信息, 没有下载的进度, 如果文件比较大的话, 就会感觉点击了只是在loading但是并不能确定文件是否在下载, 也无法知道文件的下载进度, 体验感不好
// 接收url fileName, 以及文件下载成功之后的回调
downLoadFile(url, fileName, callback) {
  const url2 = url; // url.replace(/\\/g, "/");
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url2, true);
  xhr.responseType = "blob";
  //xhr.setRequestHeader('Authorization', 'Basic a2VybWl0Omtlcm1pdA==');
  // 为了避免大文件影响用户体验,建议加loading
  xhr.onload = () => {
    if (xhr.status === 200) {
      // 获取文件blob数据并保存
      // const suffix = this.getFileSuffix.call(this, url, fileName);
      // this.saveAs.call(this, xhr.response, fileName)
      this.saveAs.call(this, xhr.response, fileName)
    }
	// 下载成功之后执行回调
    callback && callback();
  };
  xhr.send();
},

  1. 通过OSS实现有进度条的下载方法
    优点: 点击下载之后直接在浏览器左下角弹出对应的文件信息以及下载的进度, 体验感比较好
// 下载操作
downloadAction(row, type = '') {
  // 获取上传参数
  getDownloadParam().then(data => {
    // 拿到参数之后去创建 OSS 客户端对象
    this.createOssClient(data).then(client => {


###  总结

大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

![](https://img-blog.csdnimg.cn/img_convert/718310d106ab948d6f467d78e08b1aed.png)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Spring Boot和Servlet技术实现在前端调用后端接口下载文件,并且利用JavaScript实现进度条的展示。 以下是一个代码示例: 1. 后端代码 ```java @RestController public class FileDownloadController { @GetMapping("/download") public void downloadFile(HttpServletRequest request, HttpServletResponse response) throws IOException { String fileName = "your_file_name"; String fileUrl = "your_file_url"; URL url = new URL(fileUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置请求方式 conn.setRequestMethod("GET"); // 设置连接超间 conn.setConnectTimeout(5000); // 设置读取超间 conn.setReadTimeout(5000); // 设置请求头信息 conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"); // 获取文件总长度 int contentLength = conn.getContentLength(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setHeader("Content-Length", String.valueOf(contentLength)); InputStream inputStream = conn.getInputStream(); OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; long bytesReadSum = 0; while ((bytesRead = inputStream.read(buffer)) != -1) { bytesReadSum += bytesRead; // 计算下载进度 int progress = (int) (bytesReadSum * 100 / contentLength); // 将下载进度写入response的header中,前端通过Header可以获取到下载进度 response.setHeader("X-Download-Progress", String.valueOf(progress)); outputStream.write(buffer, 0, bytesRead); } inputStream.close(); outputStream.close(); } } ``` 在代码中,您需要修改以下参数: - fileName: 下载到本地的文件名称。 - fileUrl: 下载文件的URL地址。 在代码中,将下载进度通过Header的X-Download-Progress写入response中,前端可以通过获取Header中的X-Download-Progress来获取下载进度。 2. 前端代码 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>File Download Example</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script> $(document).ready(function () { $("#download-button").click(function () { var url = "/download"; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = function (e) { if (this.status == 200) { var blob = this.response; var fileName = "your_file_name"; var a = document.createElement('a'); a.download = fileName; a.href = window.URL.createObjectURL(blob); $("body").append(a); a.click(); $(a).remove(); } }; xhr.onprogress = function (e) { if (e.lengthComputable) { var progress = parseInt(e.loaded / e.total * 100); $("#download-progress").text("Download Progress: " + progress + "%"); } }; xhr.send(); }); }); </script> </head> <body> <button id="download-button">Download File</button> <div id="download-progress"></div> </body> </html> ``` 在代码中,通过jQuery实现按钮的点击事件,并通过XMLHttpRequest发送GET请求,获取到文件流并下载到本地。同,通过onprogress事件计算下载进度,并将进度显示在页面上。 注意:在实现前端下载文件,需要将响应的Content-Type设置为application/octet-stream,并且设置Content-Disposition为attachment,这样浏览器弹出下载对话框。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值