【Vue-element-admin】vue前端处理Blob文件流,实现文件下载

本文介绍了后端使用BaseView类处理文件下载请求,以及前端如何处理后端返回的二进制流和设置下载文件名的过程。重点在于处理请求类型和创建下载链接的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后端
class DownLoadResource(BaseView):
  def post(self):
    file_url=self.request.form.get('file_url')
    file_name=file_url.split('/')[-1]
    download_url=config.LOCAL_UPLOAD_PATH=file_name
    return send_file(download_url,as_attachment=True)
前端
request.js

因为后端返回的是二进制流,也没有返回状态码,所以会被拦截,需要在request.js文件对返回的状态码进行处理

if(response.request.responseType ===  'blob' || response.request.responseType ===  'arraybuffer'){
      return response.data
 }
downloadFile.vue
<template>
  <div>
    <button @click="handleDownload()">下载文件</button>
  </div>
</template>
<script>
import DownloadResource} from '@/api/upload-file-data'

export default{
  methods:{
     handleDownload(){
       let format=new FormData()
       formData.append('file_url','http://..../xx.pdf')
       DownloadResource(formData).then(response=>{
          const objectUrl=window.URL.createObjectUrl(new Blob([response],{type:"application/pdf"}))
	      // 创建URL
	      const link = document.createElement('a');
	      link.href=objectUrl;
	      //获取后台传过来的文件名
	      link.setAttribute('download','test');
	      //将链接元素添加到DOM中
	      document.body.appendChild(link);
	      //下载文件
	      link.click();
	      //清理并释放链接元素
	      link.parentNode.removeChild(link);
       })    
     }
  }  
}
</script>
upload-file-data.js
export function DownloadResource(data){
  return request({
    url:''
    method:'post'
    reponseType:'blob',
    data
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值