如何使用 Python 下载 Google 驱动器上的目录?

How to Download a directory on Google Drive using Python?

service = self.auth()
items = self.listFilesInFolder(downLoadFolderKey)
for item in items:
    file_id = (item.get('id'))
    file_name = (item.get('name'))
    request = service.files().get_media(fileId=file_id)
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print ("Download %d%%." % int(status.progress() * 100) + file_name)
    filepath = fileDownPath + file_name
    with io.open(filepath, 'wb') as f:
        fh.seek(0)
        f.write(fh.read())

我正在使用 Google Drive API v3。 我正在尝试下载完整目录。但问题是目录本身包含文件夹,当我尝试 运行 这段代码时。发生此错误。

<HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/1ssF0XD8pi6oh6DXB1prIJPWKMz9dggm2?alt=media returned "Only files with binary content can be downloaded. Use Export with Google Docs files.">

我认为错误是由于它试图下载目录中的文件夹。但是如何下载完整目录?

P.S 目录发生变化,因此我无法对文件 ID 进行硬编码,然后再下载文件。

我相信你的情况和目标如下。

  • 通过items = self.listFilesInFolder(downLoadFolderKey),您已经能够检索所有文件和文件夹列表,包括特定文件夹下的子文件夹。
  • items 包括每个文件和文件夹的 mimeType。
  • 在你的问题中,在循环中使用文件夹时,出现错误。
  • 您想删除这个错误。

为此,这个答案怎么样?

修改点:

  • 当mimeType包含在items = self.listFilesInFolder(downLoadFolderKey)items中时,可以通过mimeType检查文件夹。文件夹的 mimeType 是 application/vnd.google-apps.folder.
  • 从你的脚本来看,我认为当使用“Files:get”方法下载Google Docs文件(Spreadsheet、Document、Slides等)时,也会出现同样的错误。
  • 要下载Google Docs文件,需要使用“文件:导出”的方法。

当上面的点反映到你的脚本中时,下面的修改怎么样?

修改后的脚本:

从:
request = service.files().get_media(fileId=file_id)
到:
file_mimeType = (item.get('mimeType'))
if file_mimeType == 'application/vnd.google-apps.folder':
    continue
request = service.files().export_media(fileId=file_id, mimeType='application/pdf') if 'application/vnd.google-apps' in file_mimeType else service.files().get_media(fileId=file_id)
  • 本次修改,首先请确认是否包含items = self.listFilesInFolder(downLoadFolderKey)items文件mimeType,再。这样,可以跳过该文件夹,并且可以使用 mimeType 的值下载 Google Docs 文件和除 Google Docs 之外的文件。
  • 在此修改中,作为示例修改,Google Docs 文件下载为 PDF 文件。如果要更改输出mimeType,请修改mimeType='application/pdf'.

参考文献: