【发布时间】:2020-06-21 17:56:08
【问题描述】:
如何从 Google Drive REST Api V3 Android 获取直接下载 URL
这个问题确实和其他人类似,但从未正确回答
在 Google Drive REST api V2 中,下载 url 是从返回 google drive 文件的 GET 请求中获取的,即
File file = mGOOSvc.files().get(fileId).execute();
以及来自
的直接下载网址String link = file.getDownloadUrl() + "&access_token=" + getAccessToken(mContext) + "alt=media";
这在今年早些时候停止工作(出于某种原因??)我收到错误 403,所以我迁移到适用于 android V3 的 Google Drive Rest Api。
我需要一个直接访问 url 才能在 Exoplayer 中使用,以便直接流式传输内容(不是输入流,我可以得到这个)我无法理解如何得到这个以及为什么它不工作......
从文档中我不确定访问令牌现在是否需要添加到请求标头中: https://cloud.google.com/blog/products/application-development/upcoming-changes-to-the-google-drive-api-and-google-picker-api
迁移指南还指出,V2 中的 downloadUrl 变为带有 ?alt=media 的 files.get 未提供示例 https://developers.google.com/drive/api/v2/v2-to-v3-reference
我已将范围添加到 GoogleAccountCredential(用于登录并创建云端硬盘客户端)和 Google 开发者控制台中,我还在 Google 开发者控制台中创建了 OAuth 客户端。
DriveScopes.DRIVE_FILE,
DriveScopes.DRIVE_APPDATA,
DriveScopes.DRIVE
我已经尝试了各种方法似乎没有任何效果.....
fun getDownloadUrl(mId: String, mContext: Context): String? {
val get = service?.files()?.get(mId)
get?.fields = "*"
val headers = HttpHeaders()
headers.authorization = getOAuth2Token(mContext)
get?.requestHeaders = headers
get?.oauthToken = getOAuth2Token(mContext)
get?.alt = "media"
val request = get?.buildHttpRequest()?.url
Log.d(TAG, "REQUEST 1 $request")
Log.d(TAG, "REQUEST 2 $request?alt=media")
val executeMedia = get?.mediaHttpDownloader?.setDirectDownloadEnabled(true)
val mDriveFile = get?.execute()
val test = get?.executeMedia()
Log.d(TAG, "TEST ${test?.request?.url}")
Log.d(TAG, "FILE ${mDriveFile?.toPrettyString()}")
val url = mDriveFile?.webContentLink + "?alt=media"
val url = mDriveFile?.webContentLink
Log.d(TAG, "URL $url")
return url
}
下载、读取、创建和删除方法都可以正常工作,但我需要直接链接如果有人可以提供帮助
【问题讨论】:
-
你已经看过this example in the documentation的Java版本了吗?
-
是的,我已经查看了文档,示例使用输入/输出流而不是文件的直接 url
-
感谢 Mateo,它对我不起作用,事实证明现在需要请求权限才能访问文件,它在文档中的任何地方都没有解释...
-
嗨!你那是什么意思?你的脚本中没有你的范围吗?您之前是否能够提出
GET请求,而现在却不能?对于GET请求,请记住您需要授予these scopes 的任何权限。您是否收到任何错误消息?感谢您的耐心等待。 -
我相信要获得直接下载URL链接,您需要访问文件元数据的
webContentLink字段。使用GET方法获取文件数据时,提取webContentLink字段,我相信这将是您的直接下载URL。欲了解更多信息,请查看此site。由于我尚未对此进行测试,您能否告诉我此建议是否有效并解决了您的问题?