【问题标题】:Upload a huge file to Google Drive using PyDrive使用 PyDrive 将大文件上传到 Google Drive
【发布时间】:2014-12-04 20:30:05
【问题描述】:

目前,我正在使用 PyDrive 将我的备份(.tar 文件)上传到谷歌驱动器。

这个库有什么特殊的事情可以将一个巨大的文件上传到谷歌驱动器(大约 5gb)。在 Google Drive API 文档中,它说我们必须使用 Resumable upload ? https://developers.google.com/drive/web/manage-uploads

我的问题是,当我尝试发送一个大文件时,脚本执行得非常快,没有任何错误,而且文件没有出现在 GoogleDrive 中。但是,如果我使用 100mb 左右的小文件执行此操作,则一切正常...

我的代码如下:

def upload(self, backupFile, backupFileName):

    json_data=open(os.path.join(__location__, 'client_secrets.json'))

    data = json.load(json_data)

    """Email of the Service Account"""
    SERVICE_ACCOUNT_EMAIL = data['client_email']

    """Path to the Service Account's Private Key file"""
    SERVICE_ACCOUNT_PKCS12_FILE_PATH = os.path.join(__location__, 'key.p12')

    f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
    key = f.read()
    f.close()

    credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
        scope='https://www.googleapis.com/auth/drive', sub='email')
    http = httplib2.Http()
    credentials.authorize(http)

    gauth = GoogleAuth()
    gauth.credentials = credentials

    drive = GoogleDrive(gauth)

    file1 = drive.CreateFile({'title': backupFileName, "parents" : [{"id":"0B7FoN03AUUdZVlNETEtWLS1VTzQ"}]} )  # Create GoogleDriveFile instance with title 'Hello.txt'

    file1.SetContentFile(backupFile);
    file1.Upload()

当我尝试发送大文件时,不会返回任何错误。 python 脚本简单地结束,没有显示任何内容...

【问题讨论】:

  • 不是答案,但我会避免将大文件发送到云端硬盘。问题太多了。尤其是 tar,我会将其拆分 (1) 为 100MB 的块,然后在下载时使用 cat(1) 重新组装
  • 我认为你是对的,我可能会使用 Amazon Glacier。

标签: python google-drive-api pydrive


【解决方案1】:

某些类型的文件有 100MB 的限制

https://support.google.com/drive/answer/37603?hl=en

大小限制

文档:1,024,000 个字符,无论页数或 字体大小。如果使用新版本的云端硬盘(带有红色的“New” 左侧按钮),上传转换后的文档文件 Google 文档格式不能大于 50 MB。如果使用 经典版云端硬盘,您无法将文档文件转换为 大于 10 MB。

电子表格:400,000 个单元格,每个工作表最多 256 列。 已上传的电子表格文件已转换为 Google 电子表格格式不能大于 100 MB,并且需要低于 每张纸有 400,000 个单元格和 256 列。

有关电子表格大小限制的更多信息 所有电子表格限制 上述内容已在新版 Google 表格中删除。 新版 Google 表格应支持 200 万个单元格 数据,但请注意,非常大的电子表格可能有 性能较慢。了解有关切换到新版本的更多信息 谷歌表格。演示文稿:在 Google 幻灯片中创建的演示文稿 最大可达 100 MB。已上传的演示文件转换为 Google 幻灯片也可以最大为 50 MB。

图纸:我们从未见过有人画过大的图纸(但 这不敢)。

其他文件:您上传但未转换为 Google 文档的文件, 表格或幻灯片格式每个最大可容纳 5 TB。

在 Google 云端硬盘、Gmail 和 Google+ 照片中,每位用户都会获得 15 GB 的免费存储空间,也可以购买额外的存储空间。

【讨论】:

  • 这怎么可能是一个答案?每当 Google API 返回错误时,它们都会在 pyDrive 上引发异常。这肯定是一个 pyDrive 错误,因为它甚至还没有进入上传部分。
【解决方案2】:

您可以通过将类似对象的文件传递给 GoogleDriveFile 的 .content 来上传任何大小

file1.content=fileobj

根据我的经验,它一次读取 8192 字节 首先它寻找 0,2,然后寻找 0,0,然后在每个 read(8192) 并且它还在 seek(0,2)+1 处调用 read(8192)

所以你必须在对象中放入 read()、tell() 和 seek() 方法 这可能来自 api 的 http.py 部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多