Как передать файл inMemoryUploadedFile в api

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

 <form action="http://127.0.0.1:8000/handler/" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>

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

@csrf_exempt
def handler(request):
    if request.method == 'POST':
        file = request.FILES['file']
        res = requests.post('http://192.168.1.68:8000/endpoint/',{})

Если нужно преобразовать файл в строку, можно использовать file.read(). Но это не рекомендуется, если загруженный файл огромен, он может перегрузить вашу систему, если вы попытаетесь считать его в память.

Для лучшей практики следует использовать TemporaryUploadedFile и открыть поток для отправки любого содержимого:

# file handle by "TemporaryUploadedFile" already
file = request.FILES['file']
res = requests.post('http://192.168.1.68:8000/endpoint/', {
    "file": open(file.temporary_file_path(), 'rb'),
})

Это для будущего меня или кого-то, у кого может быть такая же проблема.

Убедитесь, что соблюдаются правильные заголовки при использовании requests lib и отправке файлов.

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

Итак, если вам нужно установить токен для вызова api, вы можете использовать его следующим образом:

    getFile = request.FILES['form-data-name'].file.getvalue()
    file = {'form-data-name': getFile,} #The other api get this field
    self.response = requests.post(
        f'{self.service}/resource/{pk}/action/',
        headers={'Authorization': f'Bearer {self.token}'},
        files=file
    ) 
Вернуться на верх