如何在C#中无需凭据访问Google Drive公开共享内容
不用OAuth凭据列出公开共享的Google Drive内容
嗨,你说得太对了!公开共享的Google Drive资源确实不需要用户凭据(UserCredential)就能访问,咱们可以用Google Drive API的API密钥模式来实现,步骤其实很简单,我给你一步步拆解:
第一步:启用Drive API并创建API密钥
虽然是访问公开资源,但还是得先在Google Cloud Console里完成基础配置:
- 打开Google Cloud Console,新建一个项目(或者用你已有的项目)
- 在搜索框搜「Google Drive API」,找到后点击「启用」
- 启用后进入「凭据」页面,点击「创建凭据」→「API密钥」
- 生成密钥后,记得给它加个使用限制(比如只允许调用Drive API),避免被滥用
第二步:获取公开资源的ID
不管是文件夹还是文件,从共享链接里就能轻松拿到ID:
- 文件夹共享链接格式:
https://drive.google.com/drive/folders/[FOLDER_ID],[FOLDER_ID]就是你要访问的文件夹ID - 文件共享链接格式:
https://drive.google.com/file/d/[FILE_ID]/view,[FILE_ID]就是文件ID
第三步:编写代码示例(以Python为例)
我用最常用的google-api-python-client库写个示例,先安装依赖:
pip install google-api-python-client
核心代码能列出指定公开文件夹下的所有文件和子文件夹:
from googleapiclient.discovery import build # 替换成你自己的API密钥 API_KEY = "你的API密钥" # 替换成你要访问的公开文件夹ID FOLDER_ID = "公开文件夹ID" def list_public_drive_contents(): # 用API密钥初始化Drive服务(不用OAuth凭据!) service = build('drive', 'v3', developerKey=API_KEY) # 调用Drive API列出文件夹下的内容 results = service.files().list( q=f"'{FOLDER_ID}' in parents", fields="files(id, name, mimeType)", pageSize=100 # 可根据需求调整返回数量 ).execute() items = results.get('files', []) if not items: print("这个文件夹里没有内容哦") else: print("文件夹内容:") for item in items: # 区分文件夹和文件 item_type = "文件夹" if item['mimeType'] == 'application/vnd.google-apps.folder' else "文件" print(f"- {item['name']} ({item_type}) | ID: {item['id']}") if __name__ == "__main__": list_public_drive_contents()
关键注意点
- 必须确保你的共享资源设置是「知道链接的任何人都能查看」,如果是仅限特定用户的共享,这个方法就失效了
- API密钥别随便泄露,哪怕加了限制,也尽量只在自己的代码里用
- Drive API有免费配额,个人日常使用完全足够,但如果调用量极大,可能需要申请提升配额
内容的提问来源于stack exchange,提问作者Tak




