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

