二进制流 下载xlsx 展示图片(二维码)

本文介绍如何利用二进制流从xlsx文件中下载并显示图片,包括二维码。通过解析xlsx文件结构,提取图片数据,并使用合适的方法将这些图片在网页上呈现。

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

//后端大哥说后端框架里返回的是二进制流,改不了,然后就有了下边的代码,请大家认真理解,欢迎留言沟通,随时都在



export async function downloadAttendanceRecordsTemplate(params) {
  return request(`${proxyUrl}/report/downloadAttendanceRecordsTemplate`, {
    method: "POST",
    responseType: 'blob',
    data: { ...params },
  });
}
 //下载接口
 *Downloader({ payload }, { call }) {
  	 const response = yield call(downloadAttendanceRecordsTemplate, payload);
     return response;
 },


//方法
  exportById=()=>{
    this.setState({
      loadexport:true
    })
    //const {pageData:{fromMonth,toMonth,projectId,departmentId}} = this.state;
    const {pageData:{companyId,departmentId,empKeyword,fromMonth,projectCompanyId,projectDepartmentId,projectId,toMonth}} = this.state;
    if(fromMonth||toMonth){
      this.props.dispatch({
      type:'financeRecneport/exportById',
      payload:{companyId,departmentId,empKeyword,fromMonth,projectCompanyId,projectDepartmentId,projectId,toMonth}
    }).then((res)=>{
      console.log(res)
      	//size: 8358
		//type: "application/vnd.ms-excel"
		//__proto__: Blob
      if(res&&res!==null&&res!==undefined){
        if('msSaveOrOpenBlob' in navigator){
          //ie使用的下载方式
            window.navigator.msSaveOrOpenBlob(res,`导出.xlsx`);
        }else{
          if (window.FileReader) {
            let reader = new FileReader();
            reader.readAsDataURL(res);  // 转换为base64,可以直接放入a表情href
            console.log(reader,"readerreader")
            // readyState: 2
			// result: "data:application/vnd.ms-excel;base64,UEsDBBQACAgIA"
			// error: null
			// onloadstart: null
			// onprogress: null
			// onload: ƒ (e)
			// onabort: null
			// onerror: null
			// onloadend: null
			// __proto__: FileReader
			
			//我遇到的是展示二维码
			//转换完成之后直接放到url 里就可以了;

			//下载
            reader.onload = function (e) {
                // 转换完成,创建一个a标签用于下载
                var a = document.createElement('a');
                a.download = `导出.xlsx`;
                a.href = e.target.result;
                a.target ="downloadframe";
                document.body.appendChild(a);   // 修复firefox中无法触发click
                a.click();
                document.body.removeChild(a);
            }
          }
        }
      }
      this.setState({
        loadexport:false
      })
    })
  }else{
    message.info(`请选择时间段`);
    this.setState({
      loadexport:false
    })
  }
 }

 <Button type="danger" 
 	style={{float:"right",background:"rgba(247,136,2,1)",color:"#fff",border:"none",marginLeft:"20px"}} icon="upload" onClick={()=>this.Downloader()}>下载导入工时模版</Button>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值