关于Google Sheet API 4访问App Engine创建的Drive文件及Drive GUI访问的问询
我来帮你解答这两个Google Cloud相关的技术疑问:
问题1:能否通过Google Sheet API v4访问App Engine应用在Google Drive中创建的文件?
完全可以!只要满足两个核心条件:
- 你用来访问的认证凭据包含了正确的权限范围(你列出的
https://www.googleapis.com/auth/spreadsheets已经覆盖了Sheet API的读写权限,同时drive范围也能帮你定位Drive中的文件) - 你知道目标文件的ID,或者可以通过Google Drive API先查询到这些由App Engine创建的文件ID
只要符合这些,就可以直接调用Sheet API v4的接口(比如spreadsheets.get、spreadsheets.values.update等)来操作这些文件。
问题2:使用指定认证方式创建的文件能否通过Google Drive GUI访问?
默认情况下是不能直接看到的,原因在于你使用的是AppAssertionCredentials——这属于Google服务账号认证,服务账号是独立的身份实体,它创建的文件默认归服务账号自身所有,而服务账号没有对应的可视化Drive GUI界面。
如果想要在普通用户的Drive网页/客户端GUI中看到这些文件,你需要在创建文件后主动为普通用户添加权限。举个结合你现有代码的示例:
# 先创建Drive服务实例(需要确保你的scopes包含drive权限) drive_service = build('drive', 'v3', credentials=self.credentials) # 假设你已经通过Sheet API创建了表格,得到了file_id file_id = "your-spreadsheet-file-id" # 定义要添加的权限:给指定普通用户赋予编辑权限 permission_body = { 'type': 'user', 'role': 'writer', 'emailAddress': 'your-personal-email@example.com' } # 执行权限添加操作 drive_service.permissions().create( fileId=file_id, body=permission_body, sendNotificationEmail=True # 可选,会给用户发邮件通知有文件共享给他 ).execute()
另外,你的认证代码有重复获取凭据的冗余部分,建议优化成这样更简洁:
self.GOOGLESHEETS_SCOPES = [ 'https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/spreadsheets' ] # 直接用AppAssertionCredentials初始化即可,不需要重复调用get_application_default self.credentials = AppAssertionCredentials(self.GOOGLESHEETS_SCOPES) self.service = build('sheets', 'v4', credentials=self.credentials)
简单总结:服务账号创建的文件默认是“私有”的,只有API能访问;要在Drive GUI中看到,必须显式给普通用户共享权限。这一点官方文档确实没有特别直白地强调,但属于服务账号使用的常规特性。
内容的提问来源于stack exchange,提问作者Jack tileman
相关产品推荐
相关产品推荐

