我决定从Google Drive API v2迁移到v3,这并非易事。甚至以为Google编写了此documentation,其中仍然存在很多空白,并且在网络上没有太多有关此信息。
我在这里分享我发现的内容。
首先,请阅读官方文档: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 code的update
在文件上形成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表格。
我不具有评论的声誉(对不起),但是接受的答案service.about().get().setFields("user, storageQuota").execute()
中提供的代码行未运行,而是引发了属性错误: