vue 前端使用fetch实现下载文件跨域

首先配置vite.config.js

复制代码
export default defineConfig({
  plugins: [vue(),
 ],
   resolve: {
   	alias: {
   		'@': '/src', // 根据你的项目结构进行设置
   	},
   },
  server: {
      proxy: {
        '/image-proxy': {
          target: 'https://你得代理服务器',
          changeOrigin: true,
          rewrite: path => path.replace(/^/image-proxy/, ''), // 确保路径重写正确
        },
      },
    },
 
})

然后使用代码

复制代码
export function downloadImage(src, name) {
	// 参数src为图片地址,name为下载时图片的名称
	src = src.replace(/^https?://[^/]+/, '/image-proxy');
	var image = new Image()
	// 解决跨域 Canvas 污染问题
	image.setAttribute("crossOrigin", "anonymous")
	image.onload = function() {
		var canvas = document.createElement("canvas")
		canvas.width = image.width
		canvas.height = image.height

		var context = canvas.getContext("2d")
		context.drawImage(image, 0, 0, image.width, image.height)
		var url = canvas.toDataURL("image/png")

		// 生成一个a元素
		var a = document.createElement("a")
		// 创建一个单击事件
		var event = new MouseEvent("click")

		// 将a的download属性设置为我们想要下载的图片名称,若name不存在则使用'下载图片名称'作为默认名称
		a.download = name || "图片"
		// 将生成的URL设置为a.href属性
		a.href = url

		// 触发a的单击事件
		a.dispatchEvent(event)
	}
	image.src = src
}

使用

复制代码
downloadImage("图片Url","文件名.jpg")

以上只是调试的时候的代理设置,但是到你打包之后这样设置的就会失效,需要使用nginx设置代理,以下是配置,希望能帮到你,

我也是新手,也遇到打包之后访问报错,有百度了一会,需要设置ngxin的代理,确实这样的文章太少,都是说这样然后那样,试了都不可以,只能慢慢试,所以记录下。

复制代码
		location /image-proxy/ {
            # 假设图片服务器运行在 http://image-server.com:8080
            proxy_pass 你得图片地址比如 https://baidu,con;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
			
			proxy_ssl_verify off;
        }

亲测有效,记录下,希望能帮到你

相关推荐
人工智能训练4 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪5 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9226 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233226 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88218 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1368 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠8 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_949833398 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
珑墨9 小时前
【Turbo】使用介绍
前端
军军君019 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three