Closed yu5056561661 closed 1 year ago
代码上都没区别,请求头一样都设置 resposetype=blod
什么端?把代码发出来,你用的是 download 吗? 用uni.downloadFile 试试,所有功能都受限于uni
import type {HttpResponse, HttpRequestConfig, HttpError} from 'luch-request' import Request from 'luch-request' // 本地环境地址
// 局域网环境地址 // const BASE_API = '' // 线上地址 // const BASE_API = ''
const http = new Request({ //设置请求的base url baseURL: import.meta.env.VITE_BASE_API, //超时时长5分钟 timeout: import.meta.env.VITE_TIME_OUT, header: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'token': '' } }) //请求拦截器 http.interceptors.request.use( (config: HttpRequestConfig) => { // 拦截添加token
uni.showLoading({
title: '',
mask:true
});
if(config.method.toLowerCase()=="post".toLowerCase()||config.method.toLowerCase()=="put".toLowerCase()){
config.data.empId=getEmpId();
}
return config
},
(error: any) => {
return Promise.resolve(error)
}
)
// 响应拦截器 http.interceptors.response.use( (response: HttpResponse) => { uni.hideLoading(); return response.data }, (error: HttpError) => { uni.hideLoading(); return Promise.resolve(error) } )
function formatData(data: any) { switch (data.code) { case 200: return data.data case 400: uni.showToast({ title: data.msg, icon: 'none' }) return Promise.reject(data) case 401: uni.showToast({ title: data.msg, icon: 'none' }) return Promise.reject(data) case 405: // 一般是交易查询不到 return Promise.reject(data) default: return data } }
export default http
这是request ts 下面是实际使用 const config = { method: 'get', url: '', responseType: 'blob', params: { } }; proxy.$http(config).then((res: any) => { const blob = new Blob([res]); const fileName = 'xx.xlsx';
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName);
} else {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
}
});
uniapp H5 我发现也能返回blob 也是有内容的,但是转出来的 xlsx 就打不开, 但是 用axios 返回的blob 都能打开
用download 试试。uni responseType: 'blob', 不是一个合法值
我看文档上有 responseType 这个嘛
我后台是返回的流 ,这个download 也是支持流下载的吗? 怎么写还是new blob 吗?
this.$http
.get('http://localhost:3000/v1/download-image', {
responseType: 'arraybuffer'
})
.then(res => {
console.log(res);
let blob = new Blob([res.data], {
type: 'application/pdf;charset=UTF-8'
});
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = `ss.png`;
a.click();
a.remove();
window.URL.revokeObjectURL(url);
});
后台返回流下载ecxel 下出来的文件会提示损坏,但是用axios 则不会,没变动过方法的内容,axios 下载的能打开,[luch-request] 则不能