2017-04-20 24 views
0

このスクリプトは小さいファイルでは動作しますが、大きなファイル(250MB)をアップロードしようとすると動作しません。同じ大容量のファイルを手動でGDにアップロードすると、10秒以内で接続が問題ではないと判断されます。大きなファイルをアップロードできません - GoogleドライブのPython API

upload.py

from __future__ import print_function 
import os 
import sys 

from apiclient.http import MediaFileUpload 
from apiclient.discovery import build 
from httplib2 import Http 
from oauth2client import file, client, tools 

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

SCOPES = 'https://www.googleapis.com/auth/drive.file' 
store = file.Storage(r'C:\Users\lucas.rezende\.credentials\storage.json') 
creds = store.get() 

if not creds or creds.invalid: 
    flow = client.flow_from_clientsecrets(r'C:\Users\lucas.rezende\.credentials\client_secret.json', scope=SCOPES) 
    creds = tools.run_flow(flow, store, flags) if flags else tools.run(flow, store) 
DRIVE = build('drive', 'v3', http=creds.authorize(Http())) 

FILES = (
    ('OfertasMensais_20170418_n.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'), 
) 

for filename, mimeType in FILES: 

    media_body = MediaFileUpload(filename, chunksize=1024*256, resumable = True) 

    folder_id = '0000' 
    metadata = {'name': filename, 'parents': [folder_id]} 

    if mimeType: 
     metadata['mimeType'] = mimeType 
    res = DRIVE.files().create(body=metadata, media_body=filename).execute() 

    if res: 
     print('Uploaded "%s" (%s)' % (filename, res['mimeType'])) 

私はpython uploadfile.py CMD画面を実行永遠にそのようにとどまる:

誰かがこの作品を作る方法を発見するのに役立つことはできますか?私はプロのプログラマーではないので、私はこの作業に約2時間挑戦しています。

+0

ここで、そのMIMEタイプを取得しましたか? http://stackoverflow.com/a/36957953/130453 – corn3lius

+0

@ corn3lius私はこの記事の3番目の回答から得ました:http://stackoverflow.com/questions/11894772/google-drive-mime-types-listing私は変換が欲しい。私のxlsxファイルをGDにアップロードするだけです。 –

+0

あなたは 'application/vnd.ms-excel'を試しましたか? – corn3lius

答えて

0

チャンクのパラダイムに続いて、アップロードを続行するには、具体的にはnext_chunk()を呼び出す必要があります。ここをクリックしてください:https://developers.google.com/api-client-library/python/guide/media_upload#resumable-media-chunked-upload

for filename, mimeType in FILES: 
    media_body = MediaFileUpload(filename, chunksize=1024*256, resumable = True) 

    if mimeType: 
     metadata['mimeType'] = mimeType 

    req = DRIVE.files().insert(body=metadata, media_body=filename) 
    res = None 
    while res is None: 
     status, res = req.next_chunk() 
     if status : 
      print('Uploading %d%% "%s" (%s)' % (status.progress(), filename, res['mimeType'])) 
    print("Upload Complete!") 
+0

私はこのコードを更新しましたが、一部のインポートが見当たらないようです。私は 'NameError:name '要求'がndefinedではない'を取得しました。私は現在それのためです。 –

+0

私があなたが送ったリンクから読んだところでは、単一のリクエストの 'MediaFileUpload'から' chunksize = 1024 * 256'を削除することもできます... –

+0

@LucasRezende 'req'は' request'です。あなたもそれをすることができます! 'resumeable'フラグも削除する必要があります。 – corn3lius

関連する問題