如何将Google Drive文件直接上传至Amazon S3并解决CORS报错
Google Drive跨域请求报错解决方案
报错原因
该CORS报错是浏览器同源策略的强制限制:Google Drive的文件下载端点未配置Access-Control-Allow-Origin响应头,不允许第三方前端域名直接发起跨域请求,这个限制由谷歌侧控制,无法通过修改前端请求头的方式直接绕过。
可行解决方案
1. 迁移逻辑到后端执行(最推荐)
你此前尝试过用Python处理,完全可以把整个文件中转流程放在服务端实现:
- 后端服务调用Google Drive API获取文件二进制流,天然不受CORS规则限制
- 拿到文件流后直接调用S3 SDK上传到目标存储桶,全程无需经过前端中转,效率更高也不会泄露授权凭证
2. 新增后端代理接口
如果需要前端触发上传逻辑,可以在你的后端新增一个代理接口:
- 前端仅需将文件ID和授权信息传给自有后端接口
- 后端代为请求Google Drive下载文件,可选择直接在后端上传到S3,或者将文件内容返回给前端
- 你可以自行给自有后端接口配置CORS规则,允许对应前端域名访问即可
3. 修正现有代码的错误配置
你当前提交的代码里还有一处语法错误,即使绕开CORS也无法正常请求:Authorization请求头的格式错误,Bearer后不应该加冒号,正确写法如下:
axios .get("https://drive.google.com/u/0/uc?id="+id+"&export=download", { responseType: 'arraybuffer', withCredentials: false, headers:{ 'Authorization':'Bearer <access_token>', 'Content-Type': 'text/plain' } }) .then((response:any) => Buffer.from(response.data, 'binary')) .then((data:any)=>{ console.log(data) })
注意:仅临时测试时可使用本地启动的CORS代理工具绕过限制,绝对不要在生产环境使用公开的第三方CORS代理服务,会泄露你的Google Drive授权凭证和文件内容。
内容的提问来源于stack exchange,提问作者code0x00
相关产品推荐
相关产品推荐

