【问题标题】:Google Drive REST Android API V3 Direct Download UrlGoogle Drive REST Android API V3 直接下载网址
【发布时间】: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。由于我尚未对此进行测试,您能否告诉我此建议是否有效并解决了您的问题?

标签: android google-drive-api


【解决方案1】:
请求中的

"&access_token=" 不再起作用。相反,您需要像这样在 HTTP 标头中发送访问令牌:

Authorization = "Bearer <access_token>"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多