Google Picker и загрузите выбранный файл

Мне удалось интегрировать Google Picker. Теперь у меня есть FileId и access_token. Мне нужно загрузить выбранный файл на моем сервере, который находится на Python. Я следил за документацией разработчиков Google, но если я использую библиотеку python, мне придется снова аутентифицировать пользователя, что в моем случае не подходит. Просветите, пожалуйста, могу ли я скачать файл в любом формате.

Заранее спасибо.


person susheel    schedule 21.08.2017    source источник
comment
Какой mimeType вы хотите скачать с Google Диска? Если вы хотите загрузить Документы Google в любом формате, вы можете просмотреть информацию по адресу developers.google.com/drive/v3/web/ Что касается файлов, кроме Google Docs, в основном можно загрузить исходный формат. И тогда у вас уже есть токен доступа. Таким образом, вы можете загружать файлы, используя это и requests. Если я неправильно понял ваш вопрос, извините.   -  person Tanaike    schedule 22.08.2017
comment
Спасибо за информацию @Tanaike Я хочу загрузить выбранные пользователем изображения и видео. Я пробовал GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media Authorization: Bearer <ACCESS_TOKEN>, но он дает данные файла. У меня нет расширения файла. Итак, есть ли способ загрузить выбранный файл по запросу с идентификатором файла. Я не хочу использовать библиотеку google python. Пожалуйста, предложите.   -  person susheel    schedule 22.08.2017


Ответы (1)


Это очень простой пример сценария для загрузки файлов с использованием токена доступа и идентификатора файла без библиотеки Google. И этот образец предполагает файлы (изображения и видео), кроме Google Docs, как вы сказали. Поток следующий.

Поток :

  1. Получите имя файла и mimeType.
  2. Создайте имя файла из полученного имени файла и mimeType. Если имя файла не имеет расширения на Google Диске, этот сценарий добавляет расширение к имени файла с помощью mimeType и сохраняет его. Если имя файла на Google Диске имеет расширение, этот скрипт использует исходное имя файла и сохраняет его.
  3. Загрузите файл и сохраните его как созданное имя файла. Если вы хотите сохранить файл в определенном каталоге, установите его самостоятельно.

Пример сценария:

import mimetypes
import os.path
import requests
accessToken = "### access token ###"
fileId = "### file id ###"
fileInf = requests.get(
    "https://www.googleapis.com/drive/v3/files/" + fileId,
    headers={"Authorization": "Bearer " + accessToken},
)
filename = fileInf.json()["name"]
temp, ext = os.path.splitext(filename)
filename = filename if ext != "" else filename + mimetypes.guess_extension(fileInf.json()["mimeType"])
r = requests.get(
    "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media",
    headers={"Authorization": "Bearer " + accessToken},
)
with open(filename, "wb") as f:
    f.write(r.content)

Если это вам не помогло, извините.

person Tanaike    schedule 22.08.2017
comment
Спасибо за сценарий @Tanaike. Думаю, мой accessToken недействителен. Этот токен доступа взят из средства выбора Google. fileInf возвращает заголовок 401 с {'location': 'Authorization', 'message': 'Invalid Credentials', 'domain': 'global', 'reason': 'authError', 'locationType': 'header'}. Подскажите, пожалуйста, где я могу получить токен доступа, если это неверно? - person susheel; 22.08.2017
comment
@susheel Добро пожаловать. И тебе спасибо. Если ваш вопрос был решен, нажмите кнопку принятия. Другие люди также могут подтвердить это решение. stackoverflow.com/help/accepted-answer - person Tanaike; 23.08.2017
comment
@Tanaike можно ли преобразовать ваш скрипт для использования библиотеки python api google drive ('google-api-python-client')? - person Anthony Kong; 04.09.2017
comment
@Anthony Kong Можете ли вы задать это как новый вопрос? - person Tanaike; 04.09.2017
comment
@Tanaike Совершенно верно! Просто хочу сначала уточнить у вас, возможно ли это вообще - person Anthony Kong; 04.09.2017
comment
@ Энтони Конг. Да. Я думаю, что вы можете добиться этого, используя этот образец. - person Tanaike; 04.09.2017
comment
@Anthony Kong Если вам нужен образец сценария, не стесняйтесь сказать мне. - person Tanaike; 04.09.2017
comment
@Tanaike Спасибо, но я думаю, что образец больше подходит для аутентификации типа "сервер-сервер". Вот мой вопрос: stackoverflow.com/questions/45429618/ Ключевое сходство между моим вопросом и этим вопросом: api средства выбора выполняется в браузер, и токен доступа передается на сервер python (мой работает на сервере aws ec2) - person Anthony Kong; 04.09.2017
comment
@ Энтони Конг Могу я задать вам вопрос? 1. Как вы управляете токеном обновления? Мне кажется, что вы получаете токен доступа, используя токен обновления. 2. Например, как насчет метода без google-api-python-client? Таким образом, он экспортирует файлы, используя только request и токен обновления. - person Tanaike; 04.09.2017
comment
@Tanaike На самом деле я не уверен, что это токен доступа или токен обновления. Согласно документу, он должен вернуть мне токен доступа. Нет, я просто не пробовал http. Хотели бы вы продолжить обсуждение в качестве комментария к моим вопросам? Это может помочь другим участникам SOE разобраться в проблеме. - person Anthony Kong; 04.09.2017
comment
@Anthony Kong, я перейду на на ваш вопрос. - person Tanaike; 04.09.2017