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

使用expo-app-auth上传文件至Google Drive指定文件夹失败

问题分析与解决

你遇到的核心问题是使用FormData处理multipart/related类型的请求不符合Google Drive API的要求,导致metadata里的parents参数没有被正确解析,文件默认上传到根目录。

FormData生成的是multipart/form-data格式的请求体,而Drive API的multipart上传要求的是multipart/related格式——这种格式需要明确的分隔符,且每个部分需要指定Content-Type和必要标识,FormData无法满足这些自定义要求。

修复方案

替换FormData的使用,手动构造符合multipart/related格式的请求体:

const uploadFile = async (file) => {
  if (file) {
    const filename = file.name;
    const folderId = "1Qu1IIsQJjAE131w97tLVM5FlTtExEQ1K"; // 目标文件夹ID

    const metadata = {
      name: filename,
      parents: [folderId],
      mimeType: file.mimeType,
      supportsAllDrives: true,
    };

    // 生成随机分隔符
    const boundary = "-------314159265358979323846";
    const delimiter = `\r\n--${boundary}\r\n`;
    const closeDelimiter = `\r\n--${boundary}--`;

    // 构造metadata部分
    const metadataBlob = new Blob(
      [JSON.stringify(metadata)],
      { type: "application/json" }
    );

    // 构造完整的请求体
    const parts = [
      delimiter,
      `Content-Type: application/json\r\n\r\n`,
      metadataBlob,
      delimiter,
      `Content-Type: ${file.mimeType}\r\n\r\n`,
      file,
      closeDelimiter
    ];
    const formDataBlob = new Blob(parts);

    try {
      const res = await fetch(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
        {
          method: "POST",
          headers: {
            Authorization: `Bearer ${accessToken}`,
            "Content-Type": `multipart/related; boundary=${boundary}`,
          },
          body: formDataBlob,
        }
      );
      const data = await res.text();
      console.log(data);
    } catch (err) {
      console.log(err);
    }
  } else {
    Alert.alert("Please select a file to upload");
  }
};

额外检查项

  • 确认accessToken包含正确的权限范围:至少需要https://www.googleapis.com/auth/drive.file(推荐,仅允许访问通过你的应用创建的文件),或者https://www.googleapis.com/auth/drive(全权限)。
  • 验证目标文件夹ID是否正确,且当前认证用户对该文件夹有写入权限(如果是共享文件夹,需确认已获得编辑权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:09