使用Drive API获取文件内容

时间:2019-04-08 06:25:59

标签: google-drive-api google-api-python-client

我正在尝试使用documentation中所述的drive().files().get()版本使用v3方法将已上传到Team Drive的文件卸载。
我可以获取元数据,例如文件ID和权限,但不知道如何访问实际的二进制内容,例如将其写入文件。有问题的文件是纯文本文件。

这是我正在使用的代码的一部分。

    request = service.files().get(fileId=file_id, supportsTeamDrives=True)
    pprint.pprint(request.to_json())
    response = request.execute()
    pprint.pprint(response)

响应(来自pprint)
请求

{
  "uri": "https://www.googleapis.com/drive/v3/files/1CxxxxxxxxxxxxHp?supportsTeamDrives=true&alt=json", 
  "method": "GET",
  "body": null,
  "headers": {
    "accept": "application/json",
    "accept-encoding": "gzip, deflate",
    "user-agent": "google-api-python-client/1.7.8 (gzip)"
  },
  "methodId": "drive.files.get",
  "resumable": null,
  "response_callbacks": [],
  "_in_error_state": false, 
  "body_size": 0,
  "resumable_uri": null, 
  "resumable_progress": 0
}

文件元数据

{'id': '1CxxxxxxxxxxxxHp',
 'kind': 'drive#file',
 'mimeType': 'text/plain',
 'name': 'test.txt',
 'teamDriveId': 'XXXXXXXXXXXXXXX'}

我可以访问文件元数据,但不知道如何获取文件的内容以写入文件。

我正在使用完整的访问范围“ https://www.googleapis.com/auth/drive”。

文档显示“通过ID获取文件的元数据或内容。”但没有说明如何操作。

1 个答案:

答案 0 :(得分:1)

好的。在尝试了不同的选择之后,我来到了一个混合了来自不同职位的信息的解决方案。

1-get_media()方法可在v3中使用,但未在任何地方进行记录(即使在v2文档中也是如此)。 2-io.BytesIO无法正常工作,更改为FileIO。

结果代码如下:

request = drive_service.files().get_media(fileId=file_id)
fh = io.FileIO(filename, "wb")
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
    status, done = downloader.next_chunk()

Google Api文档在很多方面都非常混乱且不一致。