当前位置: 首页 > news >正文

【前端】上传和下载zip文件,有进度条(el-progess)

文章目录

    • 上传
    • 下载
    • 进度条

场景:要上传一个zip,调用接口,然后下载一个zip。调用接口的接口响应要显示在进度条中。

上传

上传用的是input原生控件,在页面中隐藏。accept="application/zip"限制只能上传zip。
点击button实现上传,调用input原生组件的方法。

<el-buttontype="primary"size="large"@click="uploadSrt">上传srt</el-button
>
<inputref="srtInput"type="file"style="display: none"accept="application/zip"@change="handleUploadSrt"/>

在event中拿到上传的文件file。

注意,要使用formData和'Content-Type': 'multipart/form-data',以支持二进制的传输。

不能用application/json的响应头,File对象不能被序列化为JSON。

详情看注释。

uploadSrt() {this.$refs.srtInput.click()
},
// input原生控件的上传事件,file是拿到的文件
handleUploadSrt(event) {const file = event.target.files[0]this.upload(file)
},upload(file) {// 用FormData,支持二进制数据传输let formData = new FormData()formData.append('file', file)axios.post('url', formData, {headers: {'Content-Type': 'multipart/form-data',},//   进度条进度onDownloadProgress: (progressEvent) => {if (progressEvent.total > 0) {this.srtProgress = Math.round((progressEvent.loaded * 100) / progressEvent.total)} else {this.srtProgress = 100 // 防止progressEvent.total为0出现无限大}},timeout: 10000, // 设置超时时间,若接口在10s内没响应就抛出异常,在catch中捕获}).then((response) => {// 响应后的逻辑}).catch((error) => {// 异常的逻辑})
},

下载

请求某个接口下载文件。

请求要设置参数,表示是二进制文件:responseType: 'blob'
创建一个url和a标签,点击a标签则下载。

download(type) {let url = 'url'axios.get(url, { responseType: 'blob', timeout: 10000 }).then((res) => {const fileName='' // 设置下载的文件名// 创建一个下载url和a标签const downloadUrl = window.URL.createObjectURL(new Blob([res.data])) // res.data 是要下载的文件const link = document.createElement('a')link.href = downloadUrl// 设置download属性,点击链接就能下载link.setAttribute('download', `${fileName}`)// 将a标签加在文档中,点击下载document.body.appendChild(link)link.click()        }).catch((error) => {// ...})},

进度条

用ElementPlus的组件el-progress,传入一个srtProgress即可。不过效果是一下就闪到100了(可能是接口响应很快??)。

<el-progress:percentage="srtProgress"status="warning":stroke-width="12"
/>

最后改为,不要设置超时。给接口多一点时间,有道理!

http://www.lryc.cn/news/392164.html

相关文章:

  • 2024年软件测试面试题,精选100+,附答案+文档
  • 在vue项目的.gitignore文件忽略不想要提交到git仓库的文件
  • 时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database
  • windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK
  • 跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle
  • Ubuntu安装PostgreSQL
  • 【HarmonyOS NEXT】鸿蒙如何让List组件不满一屏时,还要能滑动和回弹
  • JDK-SPI-服务提供者接口
  • 【docker】容器内配置环境变量
  • Java 乐观锁与悲观锁
  • python学习2-数据结构与算法-链表
  • 项目一 nfs 共享服务器 Haproxy 代理 Keepalive 高可用集群
  • TCP粘包解决方法
  • 高职人工智能专业实训课之“生成对抗网络(GAN)”
  • 【MySQL系列】隐式转换
  • 亿发:信息化建设or面子工程?究竟什么才是真正的信息化解决方案
  • 【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)
  • 树形结构C语言的实现
  • 小程序渗透测试的两种方法——burpsuite、yakit
  • 代码随想录训练营Day56
  • S32K3 工具篇4:如何在S32DS中使用lauterbach下载
  • 深度神经网络语言识别
  • STM32自己从零开始实操07:电机电路原理图
  • 网页计算器的实现
  • JAVA设计模式-监听者模式
  • anaconda命令大全
  • “论单元测试方法及应用”写作框架,软考高级论文,系统架构设计师论文
  • 基于布雷格曼偏差校正技术的全变分一维时间序列信号降噪方法(MATLAB R2018A)
  • 【CentOS 7.6】Linux版本 portainer本地镜像导入docker安装配置教程,不需要魔法拉取!(找不着镜像的来看我)
  • 【windows|012】光猫、路由器、交换机详解