我正在为我的下载应用程序使用驱动器 SDK,根据文档,我必须使用 files.get() 查询文件元数据,我在这里执行以下操作:
File remoteFile = this.driveClient.files().get(this.remoteMediaId).execute();
我得到的响应包含所有描述的元数据,包括一个 downloadUrl:
{
"alternateLink" : "https://docs.google.com/file/d/0B9G3K3KUUcIISUdXMHkycUNFLVE/edit?usp=drive_web",
"createdDate" : "2013-04-29T21:32:06.009Z",
"downloadUrl" : "https://doc-04-9o-docs.googleusercontent.com/docs/securesc/kgbtvvv26q246qm8m1k4g2in1v7bhclv/e41n570nep6dionm41b8g25ennqqspmh/1367863200000/14985545053951403951/14985545053951403951/0B9G3K3KUUcIISUdXMHkycUNFLVE?h=16653014193614665626&e=download&gd=true",
...
然后,我使用提供的下载链接对该文件发出 http 请求:
HttpResponse downloadResponse = null;
try {
log.info(downloadUrl);
log.info(downloadUrl.equals(remoteFile.getDownloadUrl()));
downloadResponse = this.driveClient.getRequestFactory()
.buildGetRequest(new GenericUrl(downloadUrl))
.execute();
...
大多数文件的响应是 404,但有些工作。如果我只是按照文档运行 curl 请求,我也会得到 404。
curl -v -H 'Authorization: Bearer ya29.***********...' 'https://doc-04-9o-docs.googleusercontent.com/docs/securesc/kgbtvvv26q246qm8m1k4g2in1v7bhclv/e41n570nep6dionm41b8g25ennqqspmh/1367863200000/14985545053951403951/14985545053951403951/0B9G3K3KUUcIISUdXMHkycUNFLVE?h=16653014193614665626&e=download&gd=true'
* About to connect() to doc-04-9o-docs.googleusercontent.com port 443 (#0)
* Trying 74.125.239.140...
* connected
* Connected to doc-04-9o-docs.googleusercontent.com (74.125.239.140) port 443 (#0)
...
> GET /docs/securesc/kgbtvvv26q246qm8m1k4g2in1v7bhclv/e41n570nep6dionm41b8g25ennqqspmh/1367863200000/14985545053951403951/14985545053951403951/0B9G3K3KUUcIISUdXMHkycUNFLVE?h=16653014193614665626&e=download&gd=true HTTP/1.1
> User-Agent: curl/7.27.0
> Host: doc-04-9o-docs.googleusercontent.com
> Accept: */*
> Authorization: Bearer ya29.***************************************
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 404 Not Found
当我将授权承载请求标头更改为我知道无效的内容时,例如。“foobar” 我收到 401 未经授权的响应。但是,当我使用有效密钥查询元数据时,我会得到一个下载 url 和 webcontent url。我登录后可以在浏览器中看到该文件,但 downloadUrl 失败。此处描述了我正在遵循的过程:https ://developers.google.com/drive/manage-downloads
更新:如果我删除 gd=true 参数,我会得到一个 302,其中包含指向有效链接的位置标头。从谷歌返回的downloadUrl不正确吗?
UPDATE2:我在检索元数据中的 downloadUrl 后立即发出请求,我知道文档指定它是一个短暂的 URL。
UPDATE3:作为参考,这是通过相同方法检索到的能够成功检索图像的downloadUrl: https ://doc-0s-9o-docs.googleusercontent.com/docs/securesc/kgbtvvv26q246qm8m1k4g2in1v7bhclv/q8d8m0pthrvjbje5srvraoe864okrb5r/13678704500009/140835540009/1408355000093 14985545053951403951/0B9G3K3KUUcIIRWgxLVZpSzBfdWM?h=16653014193614665626&e=下载&gd=true