Google Drive API v3迁移
我决定从Google Drive API v2迁移到v3,这不是一件容易的事情。 即使Google写了这个文档 ,也有很多空白,网上没有太多关于这个的信息。
我在这里分享我发现的东西。
首先,阅读官方文档: 迁移到Google Drive API v3
下载
下载已经改变。 字段downloadUrl
不存在了。 现在可以这样做了:
service.files().get(fileId).executeMediaAndDownloadTo(outputStream);
我尝试了新的字段webContentLink
但它返回HTML内容,而不是文件的内容。 换句话说,它提供了链接到Drive web UI的链接。
上传
上传只需要更改单词insert
create
,仅此而已。
垃圾桶/更新
我用这个was浪费了一些时间。 曾经是一个简单的service.files().trash(fileId).execute()
。 文档说
files.trash – > files.update与{'trashed':true}
v2上的update
示例代码使文件get
,设置新值,然后调用update
。
在v3上,使用像这样的update
会抛出此exception:
{ "code" : 403, "errors" : [ { "domain" : "global", "message" : "The resource body includes fields which are not directly writable.", "reason" : "fieldNotWritable" } ], "message" : "The resource body includes fields which are not directly writable." }
解决方法是创build一个空File
只设置新值:
File newContent = new File(); newContent.setTrashed(true); service.files().update(fileId, newContent).execute();
注意: File
是指com.google.api.services.drive.model.File
(它不是java.io.File
)。
名单
由service.files().list()
返回的文件现在不包含信息,即每个字段为空。 如果你想在v3上list
像v2中的行为,就像这样调用它:
service.files().list().setFields("nextPageToken, files");
关于search文件的文档使用setFields("nextPageToken, files(id, name)")
但没有关于如何获取文件的所有信息的文档。 现在你知道,只是包括“文件”。
字段
完整资源不再被默认返回。 使用
fields
查询参数来请求返回特定的字段。 如果未指定,则只返回常用字段的一个子集。
最后一部分并不完全正确,因为在某些情况下您被迫使用setFields
。 例如,如果你使用service.about().get().execute()
你会得到这个错误:
"The 'fields' parameter is required for this method."
这可以通过调用service.about().get().setFields("user, storageQuota").execute()
来解决。
在文档的末尾提到:
应该为返回的方法指定
fields
查询参数
对于其余的更改,只需按照文档中的Google表。