如何通过Google Picker获取特定Google Drive文件夹的访问权限?
核心结论
无法通过Google Picker直接获取「仅特定文件夹及其所有内容」的访问权限。drive.file(或旧版drive.files)权限的逻辑是仅授权用户明确选中的单个资源(文件/文件夹),以及应用自身创建的资源。选中文件夹仅能让应用访问该文件夹的元数据,无法自动获得其内部所有已有文件的访问权限。
替代方案(无需https://www.googleapis.com/auth/drive全权限)
方案1:使用
drive.metadata.readonly权限
如果仅需获取文件夹内文件的元数据(名称、ID、类型等),不需要访问文件内容,这个权限完全适用。它允许应用读取用户Drive中所有文件的元数据,权限范围远小于全Drive权限,且无需用户逐个选择文件。修改权限后,后端的listFiles查询就能正常返回文件夹内的文件列表。方案2:引导用户批量选择文件
利用你已启用的MULTISELECT_ENABLED功能,允许用户一次性选中文件夹内所有需要访问的文件。应用通过drive.file权限即可获取这些选中文件的访问权限。但该方案体验较差,仅适合文件数量较少的场景。方案3:
drive.file权限 + 应用自建文件访问
如果你的应用仅需在选中文件夹内创建新文件,并访问这些自建文件,drive.file权限足够。应用创建的文件会自动被授权访问,无需用户额外操作,但无法访问用户已有的文件。
当前问题解析
你使用drive.files权限选中文件夹后,后端查询返回空结果的原因是:该权限下,应用仅能访问用户明确选中的单个资源(此处为文件夹本身)和应用自建文件,而文件夹内的已有文件未被用户选中,因此应用无权限访问这些文件。当你选中单个文件时,应用获得该文件的权限,因此能正常查询到结果。
内容的提问来源于stack exchange,提问作者Юрий Кот

