下载功能实现:get请求为数组

本文介绍了如何在前端使用QS库将数组参数按后端要求转换为特定格式,如`a=b&a=c`,并展示了QS库不同数组格式的转换方法。同时,讲解了如何通过后端设置响应头,使前端能够获取到下载文件的名称,并实现文件的自动下载。重点涉及HTTP请求头的配置和响应头的暴露。
摘要由CSDN通过智能技术生成
前序

问题:
1、get请求中参数为数组:根据后端的要求转化为一定的格式
2、下载的文件名称在相应头中:需要后端更改后前端在请求头中获取

  1. 数组需转换

格式要求:数组 a=[“b”,“c”] 要求格式为a=b&a=c

//安装qs
npm inistall qs --save
//引入qs(我是在请求拦截配置中更改的)
important qs from 'qs'
/**
 * 请求拦截器(拦截get处理后可直接传递数组参数)
 */
instance.interceptors.request.use(
    config => {
        if (config.method === 'get') {
            config.paramsSerializer = function(params) {
            return qs.stringify(params, { arrayFormat: 'repeat' })
            }
        }
        return config;
    }
);
  • 知识拓展

qs转换数组如下:

1、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) 输出结果:'a[0]=b&a[1]=c'
2、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })// 输出结果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })// 输出结果:'a=b&a=c'
4、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })// 输出结果:'a=b,c'
  1. 获取请求头中的参数

处理方法:需要后端处理请求头参数

//自定义响应头
ctx.res.setHeader('myheader','abc')
//通过header设置允许前端访问
ctx.res.setHeader('Access-Control-Expose-Headers', 'myheader')
                    getExportUserAction({
                        ...this.formValidate,//这是参数集合
                    }).then(res => {
                        if (!res.data) {
                            return
                        } else {
                            let url = window.URL.createObjectURL(res.data);
                            let link = document.createElement('a');
                            link.style.display = 'none';
                            link.href = url;
                            let fileName = res.headers["myheader"];//获取请求头
                            link.setAttribute('download', fileName);
                            document.body.appendChild(link);
                            link.click()
                            document.body.removeChild(link);
                            window.URL.revokeObjectURL(link.href);
                        }
                    })

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值