使用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
相关产品推荐
相关产品推荐

