Google Drive API v3迁移

问题描述 投票:17回答:2

我决定从Google Drive API v2迁移到v3,这并非易事。甚至以为Google编写了此documentation,其中仍然存在很多空白,并且在网络上没有太多有关此信息。

我在这里分享我发现的内容。

google-drive-api
2个回答
40
投票

首先,请阅读官方文档:v2 to v3 reference |Drive API v3 versus v2| Migrate to v3


下载

Download已更改。字段downloadUrl不再存在。现在,可以通过以下方式实现:

service.files().get(fileId).executeMediaAndDownloadTo(outputStream);

我尝试了新字段webContentLink,但它返回HTML内容,而不是文件的内容。换句话说,它为您提供了到云端硬盘网络界面的链接。


上传

上传仅需要将单词insert更改为create,仅此而已。


废纸//更新

我浪费了这个时间😔。以前是简单的service.files().trash(fileId).execute()。文件说

files.trash-> files.update,带有{'trashed':true}

v2上example codeupdate在文件上形成get,设置新值,然后调用update

在v3上,像这样使用update会引发此异常:

{
  "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."
}

解决方案是创建一个空的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 for files and folders上的文档使用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表格。


0
投票

我不具有评论的声誉(对不起),但是接受的答案service.about().get().setFields("user, storageQuota").execute()中提供的代码行未运行,而是引发了属性错误:

© www.soinside.com 2019 - 2024. All rights reserved.