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

使用Google Drive API上传Blob至谷歌云端硬盘,无法设置文件名和路径求助

解决Google Drive API上传Blob时无法设置文件名和路径的问题

你当前使用的uploadType=media是简单上传模式,仅能上传文件内容,无法通过请求头设置文件名这类元数据。要同时设置文件名和指定存储路径(即父文件夹ID),需要改用multipart/related类型的上传请求,将文件元数据和Blob内容合并发送。

修改后的代码示例

async function uploadToDrive(imgBlob, fileName, folderId, accessToken) {
  // 构造元数据部分,设置文件名和父文件夹
  const metadata = JSON.stringify({
    name: fileName,
    parents: [folderId] // 填入目标文件夹ID,留空则上传到根目录
  });

  // 创建FormData,组合元数据和文件内容
  const form = new FormData();
  form.append('metadata', new Blob([metadata], { type: 'application/json' }));
  form.append('file', imgBlob);

  try {
    const res = await fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${accessToken}`
      },
      body: form
    });
    const data = await res.json();
    console.log('上传成功:', data);
    return data;
  } catch (error) {
    console.error('上传失败:', error);
  }
}

关键说明

  • 元数据设置:通过name字段指定文件名,parents数组传入文件夹ID即可将文件存入指定路径(文件夹ID可从谷歌云端硬盘的文件夹URL中提取)。
  • 请求类型:uploadType=multipart支持同时发送元数据和文件内容,这是设置文件属性的标准方式。
  • FormData构造:必须将元数据以application/json类型的Blob加入FormData,键名固定为metadata,文件内容的键名固定为file。

如果不需要指定文件夹,删除parents字段即可,文件会默认上传到云端硬盘根目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:20:28