为了账号安全,请及时绑定邮箱和手机立即绑定

Google Drive API v3迁移

/ 猿问

Google Drive API v3迁移

扬帆大鱼 2019-11-18 10:40:38

我决定从Google Drive API v2迁移到v3,这并非易事。即使以为Google编写了此文档,也有很多空白,并且在网络上没有太多有关此文档的信息。


我在这里分享我发现的东西。


查看完整描述

2 回答

?
呼啦一阵风

首先,请阅读官方文档:迁移到Google Drive API v3


下载

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


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

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


上载

上传只需要改词insert了create,仅此而已。


垃圾桶/更新

我浪费了一些时间。过去很简单service.files().trash(fileId).execute()。医生说


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


该示例代码用于update在V2使得get上档,设定了新的值,然后调用update。


在v3上,使用updatelike会引发以下异常:


{

  "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()现在不包含信息,即每个字段为null。如果您希望list在v3上的行为类似于v2,请按以下方式调用它:


service.files().list().setFields("nextPageToken, files");

使用了“ 搜索文件”文档,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表格即可。


查看完整回答
反对 回复 2019-11-18
?
米脂

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


    about = service.about().get().setFields("user", "storageQuota").execute()

AttributeError: 'HttpRequest' object has no attribute 'setFields'

相反,该行应显示为:


service.about().get(fields = "user, storageQuota").execute()


查看完整回答
反对 回复 2019-11-18

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信