以下内容由CHATGPT及笑面虎共同生成、有用望采纳:
【您想要解决的问题】:您想要解决的问题是如何在前端使用JSZip库将多个图片下载链接打包成一个zip文件,但遇到了跨域错误(CORS policy)。
【图片内容】:
- 第一张图片显示了一个环境URL和响应示例,其中包含了一个昵称和手机号组合的字符串,以及一个二维码下载地址。
- 第二张图片显示了一个错误信息,指出在尝试从某个URL获取资源时,由于CORS策略,请求被阻止了。错误提示建议如果需要无CORS的不透明响应,可以将请求的模式设置为'no-cors'。
【问题出现原因】:问题出现的原因是在前端尝试通过fetch API下载图片时,由于跨域资源共享(CORS)策略的限制,浏览器阻止了请求。您的代理配置可能没有正确地代理到实际的图片资源服务器。
【问题解决方案】:
- 确保后端服务器配置了适当的CORS策略,允许前端应用的域名进行资源访问。
- 如果您无法控制后端服务器的CORS设置,您可以考虑设置
mode: 'no-cors'在fetch请求中,但这将限制您只能获取到opaque response,即不能读取响应的内容,只能知道响应的状态。
【提供代码】:由于您的需求是下载图片并打包成zip,而不是读取响应内容,所以可以使用no-cors模式。但请注意,使用no-cors模式将无法获取到图片的确切MIME类型,这可能会影响zip文件中图片的正确展示。
// ...之前的代码保持不变
const promises = nonEmptyActivityCodes.map(async (url, index) => {
const fetchData = await fetch(url, { mode: 'no-cors' });
const blob = await fetchData.blob();
const filename = `image${index + 1}${url.match(/\.[^.]+$/)[0]}`;
zip.file(filename, blob);
});
// ...之后的代码保持不变
【代码运行方式】:您需要在支持ES6的现代浏览器中运行此代码,并且需要有JSZip库的支持。
【代码预期运行结果】:如果代码成功运行,它将创建一个zip文件,并触发浏览器的下载操作,用户可以下载并解压缩查看图片。
【推荐相关链接】:

