使用 Google Drive API 上传图片等二进制文件时,若创建出 0 字节空文件,通常因未正确指定 uploadType 或媒体流未被驱动识别所致;本文详解根本原因、正确 multipart 上传方式及避坑指南。
使用 google drive api 上传图片等二进制文件时,若创建出 0 字节空文件,通常因未正确指定 `uploadtype` 或媒体流未被驱动识别所致;本文详解根本原因、正确 multipart 上传方式及避坑指南。
在 Google Drive v3 API 中,files.create 支持多种上传模式(如 multipart、media、resumable),而省略或误配 uploadType 是导致 0 字节文件的最常见原因。尤其当同时提供 requestBody(元数据)和 media(文件内容)时,必须显式声明 uploadType: 'multipart' —— 否则 SDK 默认采用 media 模式(仅传内容,忽略元数据),或因流处理逻辑异常导致 body 被跳过,最终生成空文件。
✅ 正确做法:显式设置 uploadType: 'multipart'
以下为修复后的 TypeScript 示例(适配 JWT 认证与共享云硬盘):
import * as fs from 'fs';
import * as path from 'path';
public async uploadToFolder(parentFolderId: string): Promise<string> {
try {
const filePath = path.join('/Users/john/Documents/cat.jpg');
const fileStream = fs.createReadStream(filePath);
// ✅ 关键:必须显式指定 uploadType: 'multipart'
const requestBody = {
name: 'cat.jpg',
parents: [parentFolderId],
fields: 'id',
};
const media = {
mimeType: 'image/jpeg',
body: fileStream,
};
const response = await this.drive.files.create({
auth: this.jwtCreds,
supportsAllDrives: true,
uploadType: 'multipart', // ← 必填!否则 media.body 可能被忽略
requestBody,
media,
});
this.logger.info(`File uploaded successfully: ${response.data.id}`);
return response.data.id;
} catch (err) {
this.logger.error(
`Error uploading file to folder ${parentFolderId}:`,
err instanceof Error ? err.message : String(err)
);
throw err;
}
}</string>
⚠️ 注意事项:
Veo 3.1增强了音频生成能力、提示词理解能力和角色一致性控制。支持多参考图生成、场景扩展(Scene Extension)、更长视频制作以及更精准的镜头控制,同时提升了画面真实感和叙事能力。是当前 Google 主推的旗舰视频生成模型。
- 不要依赖 update 补救:答案中提到的“先 create 再 update”属于变通方案,不仅增加请求开销,还可能因并发或权限问题引发一致性风险,应避免作为常规方案。
- fs.createReadStream 是首选:相比 fs.readFileSync()(加载全量 Buffer 到内存),流式读取更节省内存且兼容大文件;确保路径存在且有读取权限。
- MIME 类型需准确匹配:例如 .jpg 文件应设为 'image/jpeg',而非 'image/png'(如示例中误写),否则可能导致预览异常或解析失败。
- JWT 权限检查:确认服务账号已获目标共享云硬盘的 Content Manager 或更高权限,并在 Google Cloud Console 中启用 Drive API。
- 调试技巧:启用 googleapis 请求日志(this.drive.options = { logging: { level: 'debug' } })可捕获底层 HTTP 请求头与响应体,快速定位 Content-Length 是否为 0。
总结:0 字节问题本质是上传类型未明确,导致 API 无法将元数据与媒体流正确组装。只需在 files.create 调用中强制添加 uploadType: 'multipart',即可让 SDK 正确构造 multipart/form-data 请求体,确保文件内容完整写入。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










