可靠地将大文件上传到 Google 云端硬盘

Reliably upload large files to Google Drive

我正在使用 Python googleapiclient 将一些大文件上传到 Google 云端硬盘。我想确保文件已正确上传。我想方设法在 Google 驱动器上获取文件的 MD5 校验和,但没有成功。这是代码:

def print_file_metadata(service, file_id):
    """Print a file's metadata.

  Args:
    service: Drive API service instance.
    file_id: ID of the file to print metadata for.
  """
    try:
        file = service.files().get(fileId=file_id).execute()

        print('Title: %s' % file['title'])
        print('MIME type: %s' % file['mimeType'])
    except errors.HttpError as error:
        print('An error occurred: %s' % error)

对于我测试的文件,似乎文件 dict 不包含其 MD5 校验和。有什么方法可以从 API 中获取它吗?或者是否有其他方法检查文件是否已正确上传?

  • 您想使用驱动器 API 检索文件的 MD5 校验和。
  • 您已经可以使用 Drive API 放置和获取文件。
    • 从你的脚本来看,你似乎正在使用 Drive API v2.
  • 您想使用 google-api-python-client 和 python.
  • 来实现此目的

如果我的理解是正确的,这个答案怎么样?

当使用 Drive API v2 时,从 files().get() 返回的值包括文件的 MD5 校验和。在这种情况下,请修改您的脚本如下。

修改后的脚本:对于驱动器 API v2

file = service.files().get(fileId=file_id).execute()

print('Title: %s' % file['title'])
print('MIME type: %s' % file['mimeType'])
print('MD5: %s' % file['md5Checksum'])  # <--- Added

修改后的脚本:驱动器 API v3

对于驱动器 API v3,从 files().get() 返回的值不包括文件的 MD5 校验和。因此,作为几种方法之一,您可以像下面这样使用 fields='*'。但在这种情况下,文件名是 file['name']。请注意这一点。

file = service.files().get(fileId=file_id, fields='*').execute()  # <--- Modified
print('Title: %s' % file['name'])  # <--- Modified
print('MIME type: %s' % file['mimeType'])
print('MD5: %s' % file['md5Checksum'])  # <--- Added

参考文献:

如果我误解了您的问题而这不是您想要的结果,我深表歉意。