使用 google drive api 上传本地 docx 文件并自动转换为 google docs 时,不能直接用 `application/vnd.google-apps.document` 作为上传内容的 mime 类型;必须指定原始文件类型(如 `application/vnd.openxmlformats-officedocument.wordprocessingml.document`),同时在元数据中设置目标 mime 类型以触发格式转换。
在 Google Drive API 中,application/vnd.google-apps.document 是一个只读的、虚拟的 MIME 类型,仅用于表示已存在于云端的 Google 文档资源,不可用于上传原始文件内容。当你尝试将 .docx 文件以该类型直接上传时,API 会校验实际二进制内容与声明的 MIME 类型是否匹配——而 .docx 文件显然不是 Google Docs 的原生格式,因此抛出 invalidContentType 错误。
✅ 正确做法是采用 “上传 + 转换”(upload with conversion) 模式:
以下是修复后的完整 Java 示例代码:
Drive service = getDriveService();
// 1. 构建文件元数据,并指定目标类型为 Google Docs
com.google.api.services.drive.model.File fileMetadata = new com.google.api.services.drive.model.File();
fileMetadata.setName("sample");
fileMetadata.setMimeType("application/vnd.google-apps.document"); // ✅ 关键:设在 metadata 中
// 2. 指定原始文件路径和其真实 MIME 类型(非 google-apps.*)
java.io.File filePath = new java.io.File("C:\\Users\\sample.docx");
String originalMimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
// 3. 创建 FileContent 使用原始 MIME 类型
FileContent mediaContent = new FileContent(originalMimeType, filePath);
// 4. 执行创建(自动触发 DOCX → Google Docs 转换)
com.google.api.services.drive.model.File file = service.files()
.create(fileMetadata, mediaContent)
.setFields("id, name, mimeType, webViewLink") // 推荐返回更多字段便于验证
.execute();
System.out.println("Google Doc ID: " + file.getId());
System.out.println("Web Link: " + file.getWebViewLink());⚠️ 注意事项:
通过上述方式,即可安全、可靠
地将本地 Word 文档上传并自动转化为可协作、跨平台的 Google Docs。