使用PyDrive将巨大的文件上传到Google云端硬盘

时间:2014-12-04 20:30:05

标签: python google-drive-api pydrive

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

这个库是否有特殊的功能可以将巨大的文件上传到Google云端硬盘(大约5GB)。在Google Drive API文档中,它说我们必须使用Resumable上传? 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脚本只是在没有显示任何内容的情况下结束...

2 个答案:

答案 0 :(得分:1)

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

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

  

尺寸限制

     

文件:1,024,000个字符,无论页数或数量   字体大小。如果使用新版本的Drive(红色“New”   左侧的按钮),上传的文件被转换   到Google文档格式不能大于50 MB。如果使用   经典版本的Drive,你无法转换那些文件   大于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云端硬盘,Gmail和Google+照片中,每个用户都会获得15个   GB的免费存储空间,也可以购买额外的存储空间。

答案 1 :(得分:0)

您可以通过将对象之类的文件传递到GoogleDriveFile的.content来上传任意大小

file1.content = fileobj

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

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