Python Dropbox — Как создать каталог в Dropbox и загрузить в эту новую папку?

#python #dropbox-api

#python #dropbox-api

Вопрос:

Как я могу использовать объект Python Dropbox для создания новой папки в корневом каталоге, а затем заполнить эту папку данными?

Как я могу создать метод на Python для отправки данных в определенную папку в приложении Dropbox? Когда я запускаю приведенный ниже код:

 def ship_data_to_dbx(job_id, mn):
    # ship db and zip and txt to dir for the machine name in dropbox
    mn = mn.upper()
    # specific db path for the machine
    dbx_path = "/"   mn   "/"
    db_path = os.path.join(app.root_path, 'static/log_files', job_id   ".db")
    with open(db_path, "rb") as f:
        dbx.files_upload(f.read(), dbx_path, mute=True)
  

Я получаю это сообщение об ошибке:

 dropbox.exceptions.ApiError: ApiError('8e663db4b9ae4d00b954f97065393160', UploadError('path', UploadWriteFailed(reason=WriteError('malformed_path', None), upload_session_id='AAAAAAAAAoBUOebujJCC_A')))
  

Спасибо!

Ответ №1:

Чтобы создать новую папку через Dropbox API, используя официальный Dropbox API v2 Python SDK, вы должны использовать files_create_folder_v2 метод.

Чтобы загрузить файл, вы можете использовать files_upload метод.

malformed_path Ошибка, которую вы получаете при попытке сделать это, указывает на то, что path значение, которое вы предоставляете files_upload , в данном случае ваша dbx_path переменная, не соответствует ожидаемому формату.

В частности, хотя точное значение не отображается, похоже, проблема в том, что ваше dbx_path значение имеет завершающий символ «/», который не ожидается. При указании path для загрузки в Dropbox вы должны указать полный желаемый путь, включая любые родительские компоненты path, а также имя файла, а также расширение (если таковое имеется).

Итак, например, если ваша mn переменная содержит имя файла, которое вы хотите, чтобы у загруженного файла было, эта строка должна быть:

 dbx_path = "/"   mn
  

Или, если mn это родительская папка, она будет выглядеть примерно так, filename содержащая имя и расширение файла:

 dbx_path = "/"   mn   "/"   filename