Проблемы с запросом патча в Python

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

Вот мой код:

    for person in r['records']:
    try:
        # Get Voicemail and handle conversion if necessary
        vm = person['fields']['Voicemail'][0]['url']
        if '.m4a' in vm:
            vm_name = person['fields']['Voicemail'][0]['filename'].replace('.m4a', '').replace(' ', '')

            # Download file to local machine and convert to .mp3
            r = requests.get(vm, allow_redirects=True)
            open('{}.m4a'.format(vm_name), 'wb').write(r.content)
            bash = 'ffmpeg {0}.mp3 -i {0}.m4a -codec:a libmp3lame -qscale:a 1'.format(vm_name)
            os.system(bash)

            s = requests.Session()
            s.mount('file://', FileAdapter())
            cwd = os.getcwd()
            # url = s.get('file:///{}/{}.mp3'.format(cwd, vm_name))

            # Upload/delete files to server
            r = requests.patch('https://api.airtable.com/v0/{}/People/{}'.format(base_id, person['id']), 
                        json={"fields": {"Voicemail": [{"url": 'file:///{}/{}.mp3'.format(cwd, vm_name)}]}}, 
                        headers={"Authorization": "Bearer {}".format(at_auth), "Content-type": "application/Json"})

            print(r.text)

            # Delete temporary local files
            os.remove('{}.mp3'.format(vm_name))
            os.remove('{}.m4a'.format(vm_name))

... и ответ r.text:

{"id":"recnlJBNEWFMLwYNh","fields":{"Name":"Matthew Sewell","Phone":["reciInRjmNpyTabUS"],"Voicemail":[{"id":"att7YiG4s0Epa3V6o","url":"file:////Users/test/Dropbox/python/projects/business/testing123.mp3","filename":"testing123.mp3"}]},"createdTime":"2018-08-09T00:59:35.000Z"}

Я не очень знаком с запросами исправлений, поэтому любая помощь приветствуется.

1 ответ

Бесстыдная копия вставлена ​​из другого ответа (я пометил вопрос). Так вы можете загружать данные, используя запросы. Не имеет значения, используете ли вы GET, POST, PATCH или что-то еще:

Если upload_file это файл, используйте:

files = {'upload_file': open('file.txt','rb')}
values = {'DB': 'photcat', 'OUT': 'csv', 'SHORT': 'short'}

r = requests.post(url, files=files, data=values)

а также requests отправит тело POST из нескольких частей с полем upload_file, установленным на содержимое file.txt файл.

Оригинал так пост здесь

Другие вопросы по тегам