umi-request icon indicating copy to clipboard operation
umi-request copied to clipboard

请问怎么配置才能拿到response header得值

Open zzwar2009 opened this issue 4 years ago • 4 comments

当下载二级制文件时,需要从 response header种 读取文件名字, example: Content-Disposition: attachment;filename=result_excel.xlsx

请问怎么配置才能拿到response header得值

axios demo:

axios({ method: 'post', url: ${UrlConfig.ajaxurl}rule/exportResultList, responseType: 'blob', data: params, headers: {

    }
}).then(response => {
    const fileName = window.decodeURI(response.headers['content-disposition'].split('=')[1]);
  
    saveAs(response.data,fileName);

  
})

zzwar2009 avatar Nov 06 '20 07:11 zzwar2009

 response.headers.get('content-disposition');

Tsailor avatar Jun 18 '21 09:06 Tsailor

responseType: 'blob', parseResponse: false

response.headers.get('content-disposition')

daodao-bot avatar Jul 21 '21 17:07 daodao-bot

据说是浏览器有限制,只能拿到几个默认的响应头,如果要拿到特殊响应头要服务端设置Access-Control-Expose-Headers。 我没试过,后台改在响应体里了。 http://t.zoukankan.com/lanshengzhong-p-10156933.html

magickeyyy avatar May 16 '22 06:05 magickeyyy

据说是浏览器有限制,只能拿到几个默认的响应头,如果要拿到特殊响应头要服务端设置Access-Control-Expose-Headers。 我没试过,后台改在响应体里了。 http://t.zoukankan.com/lanshengzhong-p-10156933.html @magickeyyy 貌似并没有用,Access-Control-Expose-Headers: Content-Length, Content-Type, Cache-Control, Content-Language, Expires, Last-Modified, Pragma, Content-Range,X-Content-Range response.headers?.get('Content-Type')返回null; Access-Control-Expose-Headers请求头默认是包含Content-Type的 普通查询接口可以取到Access-Control-Expose-Headers中字段对应的值,但是下载接口返回null

request.interceptors.response.use(async (response: any, options: any) => { console.log('response interceptors response start', response, options) // 3.处理附件名称 // const disposition = response.headers?.['Content-Disposition'] || response.headers?.['content-disposition'] const disposition = response.headers?.get('Content-Type') || response.headers?.get('content-type') console.log('response interceptors response.headers, disposition', response.headers, disposition) if (disposition) { response.disposition = disposition } console.log('response interceptors response end', response) return response }, { global: true })

同样的拦截器在axios中是可以生效的,不知道umi-request做了什么处理,响应头返回的数据都是空的; @clock157 @chenshuai2144

mansion-sun avatar Aug 16 '23 00:08 mansion-sun