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

如何将文件上传至Google Drive指定文件夹?代码问题排查

问题原因与修复方案

你的代码问题出在Google Drive API的multipart上传格式不正确——直接将parents作为普通表单字段传递,API无法识别这个元数据参数,所以默认上传到根目录。

正确的实现方式

Drive的multipart上传要求把文件元数据(如name、parents)和文件内容分成两个独立的part:

  1. 元数据部分:以JSON格式传递,Content-Type设为application/json
  2. 文件内容部分:直接传递文件对象

修改后的代码如下:

async processFiles(files) {
  const formData = new FormData();
  // 1. 构建元数据JSON
  const metadata = JSON.stringify({
    name: files[0].name,
    parents: [this.currentFolder.folderId] // parents是数组格式,必须传数组
  });
  // 2. 添加元数据part,指定Content-Type
  formData.append('metadata', metadata, {
    contentType: 'application/json'
  });
  // 3. 添加文件part
  formData.append('file', files[0]);

  axios.post("https://www.googleapis.com/upload/drive/v3/files", formData, {
    headers: {
      Authorization: `Bearer ${this.accessToken}`,
      // 这里不需要手动设置Content-Type,axios会自动根据FormData生成正确的multipart边界
    },
  })
  .then((response) => {
    console.log('上传成功:', response.data);
  })
  .catch((error) => {
    console.error('上传失败:', error.response?.data || error.message);
  });
},

关键修改点说明

  • parents参数格式:Drive API要求parents是数组类型,即使只传一个文件夹ID也要用数组包裹
  • 元数据单独封装:必须将元数据作为application/json类型的part传递,而不是普通表单字段
  • 自动生成Content-Type:手动指定multipart/form-data会丢失自动生成的边界分隔符,让axios自动处理即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:41:21