You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Javascript上传GitHub资产失败,遇CORS跨域问题求助

概述

我尝试使用JavaScript的fetch请求向GitHub上传资产,该请求在Postman中可正常运行。

Postman测试情况

Postman请求截图

错误信息

但在JavaScript代码中出现以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://uploads.github.com/repos/{owner}/{repo}/releases/{id}/assets?name=windows.zip. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 400. 

我已经为此问题排查了数日,提前感谢各位的帮助!

JavaScript代码
async function OpenFile() {
    let input = document.createElement("input")
    input.type = "file";
    input.accept = "application/zip";
    input.addEventListener("change", async e => {
        let file = e.currentTarget.files[0];
        let reader = new FileReader();

        reader.addEventListener('load', () => {
            let content = reader.result;

            let myHeaders = new Headers();
            myHeaders.append("Authorization", `token *****`);
            myHeaders.append("Content-Type", "application/zip");
            myHeaders.append("Accept", "application/vnd.github+json");

            let requestOptions = {
                method: 'POST',
                headers: myHeaders,
                body: content,
                mode: 'cors'
            };
            fetch(`https://uploads.github.com/repos/{OWNER}/{REPO}/releases/{ID}/assets?name=file.zip`, requestOptions)
                .then(response => response.json())
                .then(json => {
                    console.log(JSON.stringify(json))
                }).catch(error => { console.log(error) })
        }, false)
        reader.readAsArrayBuffer(file)

    })
    input.click();
}

注:我已从URL中移除了敏感信息

补充说明

GitHub API文档显示可以使用以下方式实现:

// Octokit.js
// https://github.com/octokit/core.js#readme
const octokit = new Octokit({
  auth: 'personal-access-token123'
})

await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', {
  owner: 'OWNER',
  repo: 'REPO',
  release_id: 'RELEASE_ID'
})

或者

var myHeaders = new Headers();
myHeaders.append("Authorization", "token ******");
myHeaders.append("Content-Type", "application/zip");

var file = "<file contents here>";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: file,
  redirect: 'follow'
};

fetch("https://uploads.github.com/repos/{OWNER}/{REPO}/releases/{ID}/assets?name=file.zip", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

内容的提问来源于stack exchange,提问作者Drew Chase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:49:01