Как загрузить и расшарить файл на Google Drive?

необходимо загрузить файл на google drive, расшарить его и получить общедоступную ссылку.

С загрузкой файла никаких проблем нет, а вот как сделать его общедоступным и получить ссылку нигде информации нет. Кто разбирался с проблемой просьба помочь.


Ответы (2 шт):

Автор решения: LeonidPetrovich

Попробуйте этот код

 res = DRIVE.files().insert(convert=convert, body=metadata,
        media_body=filename, fields='mimeType,exportLinks,id').execute() # <-- EDIT: added id here
    print('Uploaded file to {url}'.format(url='https://drive.google.com/open?id=' + res.get('id')))
→ Ссылка
Автор решения: contributorpw

Нельзя сразу создать файл и назначить ему права. Это делается в два этапа.

Важно. Код без аутентификации. Делайте самостоятельно. Для сервисного аккаунта, доменного пользователя или пользователя системы весь процесс будет одинаковым

Google Drive API v3

import os
import magic
from googleapiclient.discovery import build
drive_service = build('drive', 'v3')
from googleapiclient.http import MediaFileUpload

# Создание файл для примера
file_local_path = "/tmp/for_upload.txt"
with open(file_local_path, "w") as f:
    f.write(u"Тут какой-то контент 2")

# Загрузка файла
basename = os.path.basename(file_local_path)
mime = magic.from_file(file_local_path, mime=True)

# Тело запроса загрузки
file_metadata = {"name": basename, "mimeType": mime}

# Конфигурация запроса загрузки
media = MediaFileUpload(file_local_path, mimetype=mime, resumable=True)

# Загрузка
created = (
    drive_service.files()
    .create(body=file_metadata, media_body=media, fields="id,webViewLink")
    .execute()
)

# Тело запроса назначения прав
file_permission = {"role": "reader", "type": "anyone"}

# Назначение прав
drive_service.permissions().create(
    body=file_permission, fileId=created.get("id")
).execute()

# Вывод
print("File ID: {}".format(created.get("id")))
print("File url: {}".format(created.get("webViewLink")))
→ Ссылка