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表。