根据后台返回数组,用JSZip压缩,目前问题fetch请求,报跨域错;后端返回格式,看下我代理配置是不是有问题?
const {
baseURL,
} = require('./src/config')
devServer: {
proxy: {
[baseURL]: {
target: `https://abc.com`,
ws: true,
changeOrigin: true,
pathRewrite: {
['^' + baseURL]: '',
// ['^/api']: '' // 重写路径,移除 '/api' 前缀
},
},
},
}
//.src/config
module.exports = {
// 默认的接口地址, 问号后边代表开发环境,冒号后边代表生产环境
baseURL:
process.env.NODE_ENV === 'development'
? 'https://abc.com/admin-api'
: 'https://abc.com/admin-api',
// 配后端数据的接收方式
contentType: 'application/json;charset=UTF-8',
}
//接口调用
export function download(params) {
return request({
url: 'distributor/download/' + params,
method: 'get',
})
}
async downloadTable() {
try {
// 调用 download 函数并传入必要的参数,例如商品ID
let response = await download(this.linkID);
// 使用 map 来获取每个对象的 activity_code 属性
const activityCodes = response.map(item => item.activity_code);
//移除空字符串
const nonEmptyActivityCodes = activityCodes.filter(code => !!code && !/^\s*$/.test(code));
console.log('response',nonEmptyActivityCodes) // ["http://***/.png"]
// 创建JSZip对象
const zip = new JSZip();
const promises = nonEmptyActivityCodes.map(async (url, index) => {
// 为每个图片URL创建一个请求
// 这将允许fetch请求,
const fetchData = await fetch(url);
console.log('fetch',fetchData)
// 将图片转换为Blob对象
const blob = await fetchData.blob();
// 为每个图片生成一个文件名,例如:image1.jpg, image2.png
const filename = `image${index + 1}${url.match(/\.[^.]+$/)[0]}`;
// 将Blob对象作为文件添加到zip对象中
zip.file(filename, blob);
});
// 等待所有图片下载完成
await Promise.all(promises);
// 生成zip文件的Blob对象
zip.generateAsync({ type: "blob" }).then(function(content) {
// 创建一个链接元素,用于触发下载
const downloadUrl = window.URL.createObjectURL(content);
const link = document.createElement('a');
link.href = downloadUrl;
// 设置下载文件的名字
link.setAttribute('download', 'images.zip');
// 模拟点击链接,触发下载
document.body.appendChild(link);
link.click();
// 清理DOM
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
});
this.$baseMessage('下载成功', 'success');
} catch (error) {
console.log(error)
this.$baseMessage('下载失败', 'error');
}
},