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

如何用Apex向Google Drive上传文件并指定文件名、发送元数据

问题根因

你当前使用的uploadType=media参数仅支持上传二进制文件内容本身,不支持携带自定义元数据,因此Google Drive会默认将文件命名为Untitled,无法同步你期望的文件名、目录归属等配置。

解决方法

要同时上传文件内容和元数据(含文件名),需要改用multipart类型上传,按照以下逻辑修改代码即可:

核心修改点

  • 将Endpoint的uploadType参数从media改为multipart
  • 构造multipart格式请求体,分为两个部分:
    1. 第一部分为JSON格式的元数据,可指定name(文件名)、parents(父目录ID)、description(文件描述)等属性
    2. 第二部分为二进制文件内容
  • 修正原代码中重复发送请求、超时参数设置位置错误的问题

修改后的完整代码

String access_token = '你的授权token';
String base64 = '你的文件base64编码';
String fileName = '自定义文件名.jpg'; // 你要设置的文件名
String boundary = '----GoogleDriveBoundary' + String.valueOf(Crypto.getRandomLong()); // 随机边界值,避免和内容冲突

// 构造元数据部分
String metaPart = '--' + boundary + '\r\n' +
                  'Content-Type: application/json; charset=UTF-8\r\n\r\n' +
                  JSON.serialize(new Map<String, Object>{
                      'name' => fileName,
                      // 可选:指定上传到指定文件夹,替换为你的文件夹ID即可
                      // 'parents' => new List<String>{'xxx文件夹ID'},
                      // 可选:添加文件描述
                      // 'description' => '这是上传的图片文件'
                  }) + '\r\n';

// 构造文件内容部分
String filePart = '--' + boundary + '\r\n' +
                  'Content-Type: image/jpeg\r\n\r\n';
String endPart = '\r\n--' + boundary + '--';

// 拼接完整请求体
Blob bodyBlob = Blob.valueOf(metaPart + filePart);
bodyBlob = Blob.join(new List<Blob>{bodyBlob, EncodingUtil.base64Decode(base64), Blob.valueOf(endPart)}, Blob.valueOf(''));

// 构造请求
HttpRequest req1 = new HttpRequest();
req1.setMethod('POST');
req1.setEndpoint('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart');
req1.setHeader('Authorization', 'Bearer ' + access_token);
req1.setHeader('Content-Type', 'multipart/related; boundary=' + boundary);
req1.setHeader('Content-Length', String.valueOf(bodyBlob.size()));
req1.setBodyAsBlob(bodyBlob);
req1.setTimeout(60 * 1000); // 超时必须在发送请求前设置

// 发送请求
Http http = new Http();
HttpResponse res = http.send(req1);

// 打印返回结果
System.debug('状态码:' + res.getStatusCode());
System.debug('返回内容:' + res.getBody());

元数据扩展说明

你可以在元数据的JSON结构中添加任意Google Drive支持的文件属性,常用属性如下:

  • name:文件名,必填项
  • parents:数组类型,值为目标文件夹的ID,可指定文件上传到指定目录
  • description:字符串类型,文件描述
  • mimeType:可自定义文件的MIME类型,比如需要将csv文件转为Google Sheets格式时可指定为application/vnd.google-apps.spreadsheet

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:02