【问题标题】:upload a zip file to google team drive through python api通过 python api 将 zip 文件上传到谷歌团队驱动器
【发布时间】:2018-09-21 12:39:12
【问题描述】:

我正在尝试通过 Python API 将一堆 zip 文件上传到 Team Drive。奇怪的是,如果 zip 文件的扩展名是“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)

这是错误信息:

Traceback (most recent call last):
File "test_td.py", line 103, in <module>
     upload_file_to_td_folder(folder_id, file, FILE_MIME)
File "test_td.py", line 46, in upload_file_to_td_folder
     supportsTeamDrives=True, fields='id').execute().get('id')
File "/home/bo/anaconda3/lib/python3.6/site-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
     return wrapped(*args, **kwargs)
File "/home/bo/anaconda3/lib/python3.6/site-packages/googleapiclient/http.py", line 840, in execute
     raise HttpError(resp, content, uri=self.uri) googleapiclient.errors.HttpError:
     <HttpError 400 when requesting https://www.googleapis.com/upload/drive/v3/files?supportsTeamDrives=true&fields=id&alt=json&uploadType=multipart
       returned "Bad Request">

【问题讨论】:

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


    【解决方案1】:

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

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

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

    file = "data_2018-09-07.zip"
    

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

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

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

    【讨论】:

      最近更新 更多