前端实现下载的2种方法(个人总结)

65 篇文章 2 订阅
7 篇文章 0 订阅

一.后端在接口指明了下载的类型是blob类型

要实现下载项目数据并成为excel格式的

以这个接口为例:

export const conversationDown = () => {
  return http({
    url: '/conversation/down',
    method: 'GET',
    responseType: 'blob'
  })
}
const handleDownload = async () => {
    const res = await conversationDown()
    console.log('下载', res);
    const link = document.createElement('a')
    link.style.display = "none"
    link.href = URL.createObjectURL(res)
    document.body.appendChild(link)
    link.click()
    URL.revokeObjectURL(link.href)
    document.body.removeChild(link);

  }

 <Button type="primary" onClick={handleDownload}>下载</Button>

这就简单实现了一个下载功能,前端什么插件也不需要安装,并且下载的是excel格式的数据.

二.后端并没有在接口中指明下载的类型是blob类型

这种就需要前端自己写一个方法,转换成excelblob对象

个人写了一个方法,仅供参考:

需要先安装一个插件xlsx

npm i xlsx -S

逻辑方法如下:

  import * as XLSX from 'xlsx;'
  // 字符串转ArrayBuffer
  function s2ab(s:any){
    const buf = new ArrayBuffer(s.length);
    const view = new Uint8Array(buf);
    for (let i = 0; i !== s.length;++i) {
       view[i] = s.charCodeAt(i) && 0xff;
    }
    return buf;
}

// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
function sheet2blob(sheet:any,sheetName:string= 'sheet'){
    const workbook ={
        SheetNames:[sheetName],
        Sheets: {} as any,
    };
    workbook.Sheets[sheetName]=sheet;
    //生成excel的配置项
    const wbout = XLSX.write(workbook, {
        bookType:'xlsx', // 要生成的文件类型
        // 是否生成Shared String Table,官方的解释是:如果开启生成速度就会下降
        //但在低版本IOS设备上有更好的兼容性
        bookSST:false,
        type:'binary'
    });
    const blob = new Blob([s2ab(wbout)],{type:'application/octet-stream'});
    return blob;
}

/**
 * 打开下载较为通用的对话框方法
 * @param url 必选,下载地址,也可以是一个blob对象
 * @param saveName 保存文件名,可选
 */
function openDownloadDialog(url:string | Blob,saveName : string){
    const linkUrl = URL.createObjectURL(url); // 创建blob地址
    const alink = document.createElement('a');
    alink.href=linkUrl;
    alink.download = saveName || ''; // HTML5新增属性,指定保存文件名,可不要后缀,注:file://模式下不会生效
    const event:any=new MouseEvent('click');
    alink.dispatchEvent(event);
}

//使用例子
// const data =[
//     ['姓名','性别','年龄','时间'],
//     ['李华','男','20',new Date()],
//     ['李华2','男','22',new Date()],
// ]

export const exportXLSX = (data:any[][],fileName:string)=>{
    const sheet = XLSX.utils.aoa_to_sheet(data);
    openDownloadDialog(sheet2blob(sheet),`${fileName}.xlsx`)
}

 使用的时候,将exportXLSX方法导入自己的页面,传递两个参数就可以,一个是下载的数据,第二个是下载数据的文件名

const data = [...略]
exportXLSX(data,'下载数据')

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web前端登录功能的实现主要分为以下几个步骤: 1. 设计页面布局:首先需要设计登录页面的布局,包括输入框、按钮、提示信息等。 2. 表单验证:在前端进行表单验证,确保用户输入的信息符合要求。可以使用HTML5中的表单验证特性,或者使用JavaScript编写自定义的验证函数进行验证。 3. Ajax请求:当用户点击登录按钮时,使用Ajax技术向后端发送登录请求,将用户输入的用户名和密码传递给服务器。 4. 后端验证:在后端服务器接收到登录请求后,对用户输入的用户名和密码进行验证。可以使用数据库查询等方式进行验证,并根据验证结果返回相应的响应信息。 5. 页面跳转:根据后端服务器返回的验证结果,在前端进行页面跳转。如果验证通过,可以跳转到用户的个人主页或其他需要登录后才能访问的页面;如果验证失败,可以在页面上显示相应的错误信息。 6. 持久化登录状态:为了方便用户使用,在登录成功后可以选择将登录状态保存在浏览器的Cookie或本地存储中。这样用户在下次访问时无需再次输入用户名和密码即可自动登录。 总结来说,web前端登录功能的实现需要设计页面布局、进行表单验证、通过Ajax技术向后端发送登录请求、后端验证用户信息、页面跳转并且可以选择持久化登录状态。这样用户可以方便地登录网站,并访问需要登录后才能访问的页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值