Проблема с использованием Dropbox API в python с кодом OAuth2 - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь настроить приложение, используя Dropbox в качестве средства обмена файлами для пользователей.

Я могу загрузить файл с помощью токена приложения, но при попытке использовать код авторизации файлне загружается;приложение не сообщает об ошибке.

Следующий код содержит оба метода:

dbx = get_dbx_with_token()

работает, а

dbx = get_dbx_with_auth_code()

- нет.Любая помощь приветствуется.

import webbrowser

from dropbox import Dropbox
from dropbox.files import WriteMode
from dropbox import DropboxOAuth2FlowNoRedirect

APP_KEY = '<my app key>'
APP_SECRET = '<my app secret>'
APP_TOKEN = '<my app token>'

def upload(dbx):
    local_file = '<path to local file>'
    remote_file = '<remote file name>'
    with open(local_file, 'rb') as f_upload:
        try:
            foo = dbx.files_upload(f_upload.read(), remote_file, 
                                   mode=WriteMode('overwrite'))
            print('done ...', foo)
        except:
            print('Upload error')

def get_dbx_with_auth_code():
    auth_flow = DropboxOAuth2FlowNoRedirect(APP_KEY, APP_SECRET)
    authorize_url = auth_flow.start()
    webbrowser.open(authorize_url)
    auth_code = input('Authorization code: ').strip()
    try:
        oauth_result = auth_flow.finish(auth_code)
    except:
        print('Token error')
        return None
    dbx = Dropbox(oauth_result.access_token)
    return dbx

def get_dbx_with_token():
    dbx = Dropbox(APP_TOKEN)
    return dbx

if __name__ == '__main__':
    dbx = get_dbx_with_token()
    #dbx = get_dbx_with_auth_code()
    upload(dbx)

Функция dbx.files_upload (foo) возвращает:

 FileMetadata(
      name='uploaded.txt', 
      id='id:<my_id>', 
      client_modified=datetime.datetime(2018, 12, 13, 18, 24, 15), 
      server_modified=datetime.datetime(2018, 12, 13, 18, 24, 15), 
      rev='013000000010ede3870', size=6, path_lower='/upload test/uploaded.txt', 
      path_display='/upload test/uploaded.txt', 
      parent_shared_folder_id=None, 
      media_info=None, 
      symlink_info=None, 
      sharing_info=None, 
      property_groups=None, 
      has_explicit_shared_members=None, content_hash='<content hash>')

FileMetadata для get_dbx_with_token отличается:

parent_shared_folder_id='1234567890', 
sharing_info=FileSharingInfo(read_only=False,
parent_shared_folder_id='1234567890',
modified_by='dbid:AAAyXwp1wvSzPzmqzCJ9SWFuxhc')

(Кстатипапка, в которую я загружаю, является общей папкой, принадлежащей другому пользователю)

Причина, по которой я думаю, что она не работает, заключается в том, что она не отображается в папке Dropbox моего браузера, если я использую get_dbx_with_auth_code (), ноэто происходит, если я использую get_dbx_with_token ().

1 Ответ

0 голосов
/ 15 декабря 2018

Благодаря комментариям Грега я понимаю, что загрузка действительно происходила, но мое ограниченное понимание API означало, что я не осознавал, что при использовании опции auth_code файл помещается в определенную папку для приложения.Это нормально, теперь, когда я знаю, где его искать.

Вывод указывает, что файл был успешно загружен, поэтому, если вы ищете его ввеб-сайт Dropbox.Дважды проверьте, какую учетную запись / папку вы просматриваете. Кроме того, вы можете использовать другое приложение между двумя потоками, поэтому обратите внимание, что если приложение имеет разрешение «папка приложения», оно будет загружено в специальную «папку приложения».сделано для приложения, по умолчанию внутри "/ Apps"

Печать вывода files_upload показала, что происходит.

...