如何将文件上传至Google Drive指定文件夹?代码问题排查
问题原因与修复方案
你的代码问题出在Google Drive API的multipart上传格式不正确——直接将parents作为普通表单字段传递,API无法识别这个元数据参数,所以默认上传到根目录。
正确的实现方式
Drive的multipart上传要求把文件元数据(如name、parents)和文件内容分成两个独立的part:
- 元数据部分:以JSON格式传递,Content-Type设为
application/json - 文件内容部分:直接传递文件对象
修改后的代码如下:
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
相关产品推荐
相关产品推荐

