для упрощения:
curl --location --request PUT 'https://myserver.com/upload' \
--form 'file=@/Users/myname/Desktop/bond.jpg' \
--form 'test=test'
Он попадает в мое приложение Django:
class MyUploadView(APIView):
parser_classes = [FormParser, MultiPartParser]
def put(self, request, **kwargs):
print(request.FILES)
но выдает: <MultiValueDict: {}>
у меня ничего не работает, файл всегда пустой. когда я использую Content-Type: multipart/form-data
, это тоже не работает, и иногда django
жаловался, что нет boundary
-- но любое значение выдает ту же ошибку.
МОЯ ЦЕЛЬ ПРОСТА: все, что я хочу, это загрузить файл в django и сохранить его на диск в бэкэнде.
Я не могу поверить, что я трачу весь день с нулевыми результатами и ноль примерами онлайн, которые действительно работают.
Вы не упоминаете, что разрабатываете REST API, но я предполагаю, что вы используете FormParser
и MultiPartParser
.
В примере в среде Django REST используется request.data['file']
, а не request.FILES
, как в вашем коде.
Попробуйте изменить метод на
def put(self, request, **kwargs):
print(request.data['file'])
и посмотрите, получите ли вы какой-либо результат.
Чтобы сохранить загруженный файл, вы можете сделать это:
def put(self, request, **kwargs):
uploaded_file = request.data['file']
destination = open('/Users/Username/' + uploaded_file.name, 'wb+')
for chunk in uploaded_file.chunks():
destination.write(chunk)
destination.close()
return Response(uploaded_file.name, status.HTTP_201_CREATED)
Этот код заимствован из других сообщений на SO, таких как этот:
Загрузка файла Django Rest Framework
@JasonGenX - я добавил информацию о сохранении файла
как сохранить файл на диск?