0

zip ファイルをチームの Google ドライブにアップロードしようとしていますが、ファイルがチームのフォルダではなく、自分の Google ドライブに表示されます。チームの (共有) フォルダーへのアクセス許可があり、そこにファイルを手動でアップロードできます。access_token を取得できました。これが私のコードです。

import json
import requests


def get_token():
    oauth = 'https://www.googleapis.com/oauth2/v4/token'  # Google API oauth url
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    data = {
        'grant_type': 'refresh_token',
        'client_id': '{CLIENT_ID}',
        'client_secret': '{CLIENT_SECRET}',
        'refresh_token': '{REFRESH_TOKEN}',
    }

    token = requests.post(oauth, headers=headers, data=data)
    _key = json.loads(token.text)
    return _key['access_token']


# Upload files to google drive using access token
def upload_to_drive(files):
    token_key = get_token()
    headers = {"Authorization": "Bearer " + token_key}
    upload = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
        headers=headers,
        files=files
    )
    print(upload.text)


if __name__ == '__main__':
    file = "my_folder.zip"

    para = {
        "name": file,
        # "parents": [FOLDER_ID],
        "parents": [{
            "kind": "drive#file",
            "driveId": "{TEAM_DRIVE_ID}",
            "id": "{FOLDER_ID}",
            "supportsAllDrives": True
        }],

    }
    files_for_upload = {
        'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
        'file': ('application/zip', open("./" + file, "rb"))
    }

    upload_to_drive(files_for_upload)

どんな助けでも大歓迎です!

4

1 に答える 1

0

解答を見つける:

import json
import requests


def get_token():
    oauth = 'https://www.googleapis.com/oauth2/v4/token'  # Google API oauth url
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    data = {
        'grant_type': 'refresh_token',
        'client_id': '{CL}',
        'client_secret': '{CLIENT_SECRET}',
        'refresh_token': '{REFRESH_TOKEN}',
    }

    token = requests.post(oauth, headers=headers, data=data)
    _key = json.loads(token.text)
    return _key['access_token']


# Upload files to google drive using access token
def upload_to_drive(files):
    token_key = get_token()
    headers = {"Authorization": "Bearer " + token_key}
    upload = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true",
        headers=headers,
        files=files
    )
    print(upload.text)


if __name__ == '__main__':
    file = "my_file.zip" 

    para = {
        "name": file,
        "parents": ['{FOLDER_ID}'],
    }
    files_for_upload = {
        'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
        'file': ('application/zip', open("./" + file, "rb"))
    }

    upload_to_drive(files_for_upload)

supportsAllDrives はメタデータの一部であってはなりません!

于 2021-11-09T11:25:24.180 に答える