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

Google Drive API simple upload(uploadType=media)上传请求体如何构造

Google Drive Simple Upload请求体构造方案

核心修改点

你需要调整原代码的参数传递逻辑、请求配置,具体修改如下:

1. 调整事件与入参定义

原uploadFile方法的入参类型错误,不应为字符串,需传入文件对象和元数据,修改后的代码如下:

const onLoadFile = async (e: { target: { files: any } }) => {
  const fileData = e.target.files[0];
  if (!fileData) return;

  const uploadParams = {
    file: fileData,
    // 自定义文件元数据,可按需扩展
    meta: {
      name: fileData.name,
      // 如需上传到指定文件夹,新增parents字段:parents: ['目标文件夹ID']
    }
  }
  uploadFile(uploadParams);
  return null;
};

2. 修正上传请求配置

simple upload模式需要在路径指定uploadType=media,同时配置对应请求头,body直接传入文件对象即可:

const uploadFile = async (params: {file: File, meta: Record<string, any>}) => {
  const result = await gapiRequest({
    path: `${ENDPOINT}/upload/drive/v3/files?uploadType=media`,
    method: 'POST',
    headers: {
      'Content-Type': params.file.type,
      // 传递文件元数据
      'X-Goog-Upload-Metadata': JSON.stringify(params.meta)
    },
    body: params.file,
  });
  setUploadFileData(result);
};

3. 优化gapi请求封装(可选)

原封装的错误判断逻辑顺序错误,建议调整为如下版本:

const gapiRequest = async (options: gapi.client.RequestOptions): Promise<any> =>
  new Promise<any>((resolve, reject) =>
    gapi.client.request(options).execute((res, rawResponse) => {
        if (rawResponse.status >= 200 && rawResponse.status < 300) {
          resolve(res);
        } else {
          reject(rawResponse?.error || res);
        }
    })
);

注意事项

  • simple upload仅支持大小不超过5MB的文件,超过该大小请改用分片上传模式
  • 调用前需确保gapi已完成OAuth授权,且授权范围包含Drive相关的操作权限
  • 如需要返回文件的完整属性(例如分享链接),可在请求路径追加fields=*查询参数
  • 如遇Body传入File对象报错的情况,可通过FileReader将文件转为ArrayBuffer后再传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:01