如何使用Google Drive API访问并下载谷歌云端硬盘私有共享文档?
Google Drive API访问共享文件问题解答
能否用获取个人云端硬盘文档的相同方式访问他人私下共享的文件
可以,默认调用Drive API的files.list接口仅返回你本人所有的文件,原因是默认查询参数过滤了非本人所有的内容。你只需修改接口的q查询参数,添加sharedWithMe = true条件,即可拉取所有他人共享给你的文档列表,操作逻辑和拉取个人文档完全一致。
拥有查看权限的共享文档是否可以通过API下载
可以,只要对方给你的账号授予了至少查看权限,就可以通过API下载该文档,分两种场景处理:
- 普通二进制文件(含图片、PDF、压缩包、Office文档等非Google Workspace格式文件):直接调用
files.get接口并添加alt=media参数即可流式下载文件内容 - Google Workspace格式文件(含Google Docs、Google Sheets、Google Slides等谷歌在线文档):无法直接下载源文件,需要调用
files.export接口导出为你需要的目标格式(例如docx、xlsx、pdf等)后再获取导出内容
Spring Boot项目实现参考
前置依赖配置
首先在项目的pom.xml中引入Google Drive API客户端依赖,如果是Gradle项目对应调整依赖配置即可。
核心代码示例
1. 拉取共享给你的文档列表
// 构造查询条件,过滤已删除的共享文件 String sharedFileQuery = "sharedWithMe = true AND trashed = false"; // 调用接口拉取列表,指定返回需要的字段即可 FileList sharedFiles = driveService.files().list() .setQ(sharedFileQuery) .setFields("files(id, name, mimeType, size)") .execute();
2. 下载普通共享文件
String targetFileId = "你要下载的文件ID"; try (OutputStream out = new FileOutputStream("本地保存的文件路径")) { driveService.files().get(targetFileId) .executeMediaAndDownloadTo(out); }
3. 导出Google Docs格式文件为PDF
String googleDocsFileId = "Google Docs文件ID"; try (OutputStream out = new FileOutputStream("本地保存路径/导出文件.pdf")) { driveService.files().export(googleDocsFileId, "application/pdf") .executeMediaAndDownloadTo(out); }
注意事项
- OAuth2授权时至少申请
https://www.googleapis.com/auth/drive.readonly权限即可满足上述需求,无需申请全量读写权限 - 如果需要拉取指定共享文件夹下的内容,可将查询条件修改为
'共享文件夹ID' in parents AND trashed = false
内容的提问来源于stack exchange,提问作者Saumya Shah
相关产品推荐
相关产品推荐

