通过python API将zip文件上传到Google Team Drive

时间:2018-09-21 12:39:13

标签: google-drive-api zip google-api-python-client gz

我正在尝试通过Python API将一堆zip文件上传到Team Drive。奇怪的是,如果zip文件的扩展名为“ call”,则程序可以运行,但是如果扩展名为“ csv.gz”,则程序将失败。这是代码:

.zip

这是错误消息:

from __future__ import print_function
import uuid

from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools

from apiclient import errors
from apiclient.http import MediaFileUpload

args = tools.argparser.parse_args()
args.noauth_local_webserver = True

SCOPES = 'https://www.googleapis.com/auth/drive'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store, args)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

def upload_file_to_td_folder(folder_id, fn, mimeType):
    body = {'name': fn, 'mimeType': mimeType, 'parents': [folder_id]}
    return DRIVE.files().create(body=body, media_body=fn,
            supportsTeamDrives=True, fields='id').execute().get('id')

FILE_MIME = 'application/vnd.google-apps.file'
folder_id = "abcdefg"
# file = "data_2018-09-07.csv.gz" this one works!
file = "data_2018-09-07.zip"
upload_file_to_td_folder(folder_id, file, FILE_MIME)

1 个答案:

答案 0 :(得分:0)

我认为问题在于此处使用的文件扩展名类型。

file = "data_2018-09-07.csv.gz" 

Gzip是用于存储单个压缩文件的文件格式。

file = "data_2018-09-07.zip"

ZIP是一种文件格式,用于存储任意数量的文件和文件夹以及无损压缩。

这意味着gzip仅能压缩单个文件,而zip则一个接一个地压缩多个文件,然后将它们归档到单个文件中。 因此,如果您需要一个大档案中的单个文件,则必须解压缩整个zip / gzip文件以获取该文件。 在您的情况下,您已将文件指定为csv.gz,将其压缩为单个文件更有效。

您可以在此处尝试使用ZIP Extractor扩展名,以有效管理云端硬盘中的zip存档。