Прошу помочь с формированием запроса через REST API. Пытаюсь загрузить файл на диск битрикса методом disk.folder.upload. Не понимаю структуру запроса, как расположить параметры.
Прежде, чем писать сюда, попробовал воспользоваться документацией, посмотрел пару роликов, но способа загрузить файл на диск так и не нашёл.
Действовал по этой части документации - Exampe of a direct file upload to Drive24.
Вот такой запрос работает, но возвращает ошибку с уточнением параметров, личные данные и токены заменены на ****
Обидно, что приходится терять время на протыкивание способа работы того или иного метода, вместо того, чтобы расположить и назвать все параметры так, как это описано в документации. У условного telegram все методы работают ровно так, как описано в доках.
Особый смак - не пришлось кодировать файл, просто открыть и отправить на диск. Этот шаг я мучил несколько часов наверное. Зато в доках написано, что точно надо кодировать.
Мой код:
Код
def upload_file(file_to_upload, folder_id='<your folder id>', domain='your company', token='<your token>', user='<your user>'):
""" Uploads the file to specific folder on Bitrix Disk.
Bitrix REST API doc:
https://dev.1c-bitrix.ru/rest_help/disk/folder/disk_folder_uploadfile.php
Create a token with:
https://{domain}.bitrix24.ru/devops/edit/in-hook/
:param file_to_upload:
:param domain:
:param token: Disk access token.
:param folder_id: Upload folder ID.
:param user: Bitrix user ID
:return: 'uploadUrl': str, 'field': str. Check Bitrix doc.
"""
disk_url = f'https://{domain}.bitrix24.ru/rest/{user}/{token}/'
upload_url_method = 'disk.folder.uploadFile'
upload_url_response = requests.get(
disk_url + upload_url_method,
{
'id': folder_id,
'generateUniqueName': True
}
).json()
# get uploading URL and param value
upload_url = upload_url_response['result']['uploadUrl']
param = upload_url_response['result']['field']
# extract file content
with open(file_to_upload, 'rb') as f:
content = f.read()
f.close()
# uploading file to disk
payload = {param: [file_to_upload, content]}
r = requests.post(upload_url, files=payload)
return r.json()