目前,我正在使用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脚本只是在没有显示任何内容的情况下结束...
答案 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部分