Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GitHub API和Octokit JavaScript将大于1mb的文件提交到GitHub_Javascript_Github Api - Fatal编程技术网

如何使用GitHub API和Octokit JavaScript将大于1mb的文件提交到GitHub

如何使用GitHub API和Octokit JavaScript将大于1mb的文件提交到GitHub,javascript,github-api,Javascript,Github Api,我需要从客户端浏览器应用程序中运行的JavaScript更新GitHub上的一个文件。该文件可能大于1mb,因此我无法使用octokit createFile()函数,该函数仅限于小于1mb的文件 我通过oauth拥有一个经过身份验证的用户、一个文件和一个存储库,该文件需要在其中结束。基本上,我有: this.octokit = new Octokit(); this.octokit.authenticate({ type: "oauth", token: github.acce

我需要从客户端浏览器应用程序中运行的JavaScript更新GitHub上的一个文件。该文件可能大于1mb,因此我无法使用octokit createFile()函数,该函数仅限于小于1mb的文件

我通过oauth拥有一个经过身份验证的用户、一个文件和一个存储库,该文件需要在其中结束。基本上,我有:

this.octokit = new Octokit();
this.octokit.authenticate({
    type: "oauth",
    token: github.access_token
})
this.file = "some text in a string thing";
this.octokit.repos.getContents({
    owner: this.currentUser,
    repo: this.currentRepoName,
    path: path
}).then(thisRepo => {
我需要弄清楚如何将这个.file的内容放入一个文件,比如说repo根文件夹中的project.stl


我发现这一点非常好,并通过使用octokit库的ruby版本描述了该过程的工作原理。我对ruby没有任何经验,所以了解那里发生的事情需要一些时间。这似乎是一个很常见的问题,应该有一个JavaScript解决方案的例子。我希望任何人都能为我提供从JavaScript上传文件到GitHub的帮助,如果我能开始工作,我会发布我的解决方案作为一个例子。

编辑:我重写了它的工作原理,我认为这样更好:

异步createCommit(octokit,{owner,repo,base,changes}){ 让我们回应

  if (!base) {
    response = await octokit.repos.get({ owner, repo })
    base = response.data.default_branch
  }

  response = await octokit.repos.listCommits({
    owner,
    repo,
    sha: base,
    per_page: 1
  })
  let latestCommitSha = response.data[0].sha
  const treeSha = response.data[0].commit.tree.sha

  response = await octokit.git.createTree({
    owner,
    repo,
    base_tree: treeSha,
    tree: Object.keys(changes.files).map(path => {
      return {
        path,
        mode: '100644',
        content: changes.files[path]
      }
    })
  })
  const newTreeSha = response.data.sha

  response = await octokit.git.createCommit({
    owner,
    repo,
    message: changes.commit,
    tree: newTreeSha,
    parents: [latestCommitSha]
  })
  latestCommitSha = response.data.sha

  await octokit.git.updateRef({
    owner,
    repo,
    sha: latestCommitSha,
    ref: `heads/master`,
    force: true
  })

  console.log("Project saved");

}

编辑:我重写了它的工作原理,我认为这样更好:

异步createCommit(octokit,{owner,repo,base,changes}){ 让我们回应

  if (!base) {
    response = await octokit.repos.get({ owner, repo })
    base = response.data.default_branch
  }

  response = await octokit.repos.listCommits({
    owner,
    repo,
    sha: base,
    per_page: 1
  })
  let latestCommitSha = response.data[0].sha
  const treeSha = response.data[0].commit.tree.sha

  response = await octokit.git.createTree({
    owner,
    repo,
    base_tree: treeSha,
    tree: Object.keys(changes.files).map(path => {
      return {
        path,
        mode: '100644',
        content: changes.files[path]
      }
    })
  })
  const newTreeSha = response.data.sha

  response = await octokit.git.createCommit({
    owner,
    repo,
    message: changes.commit,
    tree: newTreeSha,
    parents: [latestCommitSha]
  })
  latestCommitSha = response.data.sha

  await octokit.git.updateRef({
    owner,
    repo,
    sha: latestCommitSha,
    ref: `heads/master`,
    force: true
  })

  console.log("Project saved");

}

这也是一个有用的来源:这也是一个有用的来源: