2016-03-02 3 views
2

Я создаю простое веб-приложение, которое сохраняет некоторые файлы на моем Google Диске, используя аутентификацию Auth2.0. Все работает хорошо, когда я использую код ниже, но я боюсь с некоторыми вещами здесь. Первый - сохранить содержимое в другой указанной папке. Код ниже сохраняет файлы в корневой папке, и я не могу понять, почему. upload_folder_id, очевидно, имеет хорошее значение, которое я здесь пропустил.Загрузите файлы в папку Google Диска с помощью python

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('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, flags) \ 
      if flags else tools.run(flow, store) 

DRIVE = build('drive', 'v3', http=creds.authorize(Http())) 

upload_folder_id = <my_folder_id> 
FILES = (('hello.txt', None)) # More files will be added after 

for filename, mimeType in FILES: 
    metadata = {'name': filename} 

    if mimeType: 
     metadata['mimeType'] = mimeType 
    ''' I tried all this possibilities too 
     metadata['parentId'] = upload_folder_id 
     metadata['folderId'] = upload_folder_id 
    ''' 
    metadata['parents'] = [{'id': upload_folder_id}] 

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

Второй этап аутентификации. В первый раз, когда я подключил приложение, я был перенаправлен на веб-страницу google, где я предоставляю доступ к API. Есть ли способ сделать это, не проходя через веб-браузер для проверки доступа? (Это нормально для моих локальных тестов, но я не смогу это сделать на рабочем сервере).

ответ

0

Код ниже сохраняет файлы в корневой папке, и я не могу понять, почему. Download_folder_id, очевидно, имеет хорошее значение, которое я здесь пропустил.

parents должен быть строковым массивом, поэтому нет необходимости в собственности id; просто укажите родительскую папкуId, и я думаю, что вы готовы пойти

Есть ли способ сделать это, не проходя через веб-браузер для проверки доступа?

Страница согласия имеет решающее значение для процесса аутентификации пользователя, я не думаю, что очистка может быть решением здесь. Альтернатива, которую я могу придумать, - это использовать учетные записи служб, которая представляет собой реализацию от сервера к серверу, чтобы пользователям не нужно было входить в систему. Недостаток здесь, хотя для пользователя не является собственностью данных, учетная запись службы делает это.

Смежные вопросы