Github API 响应“content is not valid Base64”

53 阅读1分钟

使用Github API上传文件时,将需要上传的文件放入 contents 里时,接口会报错,提示 content is not valid Base64

根据提示,需要将要上传的文件转换为 Base64 格式:

export const getBase64 = (file) =>
  new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });

而当再次尝试之后,发现还是提示 content is not valid Base64 ,经过多次尝试之后发现,需要将 Base64 格式的前缀去掉,例如:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCA

其中,需要将 data:image/png;base64, 去掉才行。

使用正则去掉:.replace(/^data:image\/\w+;base64,/, "")

最终上传成功:

const content = await getBase64(file);

await octokit.request(`put /repos/${toast.username}/${toast.repo}/contents/${filename}`, {
      message: `upload:${filename}`,
      content: content.replace(/^data:image\/\w+;base64,/, ""),
      branch: "master",
      headers: {
        'X-GitHub-Api-Version': '2022-11-28'
      }
    }).then(onSuccess).catch(onError)