3

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

这个库是否有特殊的事情可以将一个大文件上传到 Google Drive(大约 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脚本只是结束而没有显示任何内容......

4

2 回答 2

1

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

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

尺寸限制

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

电子表格:400,000 个单元格,每张表格最多 256 列。已上传的已转换为 Google 电子表格格式的电子表格文件不能超过 100 MB,并且每张工作表的单元格数必须少于 400,000 个且列数不得超过 256 列。

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

图纸:我们从未见过有人画过大的图纸(但这不是一个胆量)。

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

在 Google Drive、Gmail 和 Google+ 照片中,每位用户都可以获得 15 GB 的免费存储空间,并且还可以购买额外的存储空间。

于 2014-12-04T20:41:35.663 回答
0

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

file1.content=fileobj

根据我的经验,它在 ime 中读取 8192 字节,首先它寻找 0,2,然后寻找 0,0,然后在每次读取(8192)之前调用 tell(),它还在 seek(0,2) 处调用 read(8192) +1

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

于 2019-07-31T19:48:00.443 回答