使用Javascript上传GitHub资产失败,遇CORS跨域问题求助
概述
我尝试使用JavaScript的fetch请求向GitHub上传资产,该请求在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
相关产品推荐
相关产品推荐

