如何通过Google Drive API获取新创建文件的webViewLink
解决方案
你遇到的核心问题是查询文件时未启用共享驱动器访问支持——因为你的文件上传到了共享驱动器(Team Drive),默认的files.get接口不会检索共享驱动器内的资源,必须显式添加supportsAllDrives=true参数才能访问。
方法一:修正查询请求
修改你的GET请求,添加supportsAllDrives=true参数,就能通过上传返回的ID获取webViewLink:
curl -X GET -D- -H "Authorization: Bearer ${ACCESS_TOKEN}" "https://www.googleapis.com/drive/v3/files/1NR4LqfYiGt_bzy8olPZicRZ-CoWYuqTN?fields=webViewLink&supportsAllDrives=true"
方法二:上传时直接返回webViewLink(更高效)
不需要二次查询,在上传请求中通过fields参数指定返回webViewLink,上传成功后直接拿到结果:
修改上传命令:
curl -X POST -D- -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "Accept: application/json" -F "metadata=@meta.json;type=application/json;charset=UTF-8" -F "file=@hi.txt" "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true&fields=id,name,webViewLink"
返回的响应会直接包含webViewLink字段,示例:
{ "kind": "drive#file", "id": "1NR4LqfYiGt_bzy8olPZicRZ-CoWYuqTN", "name": "hi.txt", "webViewLink": "https://drive.google.com/file/d/1NR4LqfYiGt_bzy8olPZicRZ-CoWYuqTN/view?usp=drivesdk" }
另外你提到列表中看到的文件ID和上传返回的不同,大概率是因为你调用files.list时也没加supportsAllDrives=true参数,导致返回的是其他位置的文件。添加该参数后,就能看到上传返回的正确ID对应的文件。
内容的提问来源于stack exchange,提问作者Igor Kolesnik
相关产品推荐
相关产品推荐

