Проблема в том, что я, наверное, уже сижу целый день и ломаю себе голову. Требуется отправить обычный запрос multipart / form-data с изображением и несколькими строками. Вот код интерфейса Retrofit:
@Multipart
@POST("edit/profile/image")
Call<ImageAddResponse> change_avatar(@Part MultipartBody.Part image, @PartMap Map<String, RequestBody> requestBodyMap);
Существует также бэкэнд для Django. Локально тестируя все, все работает отлично, но когда я ставлю django на реальный сервер, я получаю эту ошибку при запросе выше:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.7/dist-packages/django/core/handlers/base.py", line 115, in _get_responseHow to send an object with data and an image in retrofit to Django server
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/dist-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.7/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/ioienv/ioi/api/views.py", line 349, in edit_user_image
userid = request.POST.get('userid' , 1)
File "/usr/local/lib/python3.7/dist-packages/django/core/handlers/wsgi.py", line 102, in _get_post
self._load_post_and_files()
File "/usr/local/lib/python3.7/dist-packages/django/http/request.py", line 326, in _load_post_and_files
self._post, self._files = self.parse_file_upload(self.META, data)
File "/usr/local/lib/python3.7/dist-packages/django/http/request.py", line 286, in parse_file_upload
return parser.parse()
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 154, in parse
for item_type, meta_data, field_stream in Parser(stream, self._boundary):
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 640, in __iter__
for sub_stream in boundarystream:
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 464, in __next__
return LazyStream(BoundaryIter(self._stream, self._boundary))
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 491, in __init__
unused_char = self._stream.read(1)
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 363, in read
return b''.join(parts())
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 354, in parts
chunk = next(self)
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 376, in __next__
output = next(self._producer)
File "/usr/local/lib/python3.7/dist-packages/django/http/multipartparser.py", line 439, in __next__
data = self.flo.read(self.chunk_size)
File "/usr/local/lib/python3.7/dist-packages/django/http/request.py", line 357, in read
raise UnreadablePostError(*e.args) from e
django.http.request.UnreadablePostError: [Errno 104] Connection reset by peer
Как я понимаю, ошибка в неправильном запросе. Клиент успешно отправляет фотографию во время локального тестирования; он также успешно отправляет фотографию в похожий API, написанный на php. В то же время django не принимает запрос от android дооснащения, но в то же время при отправке через Почтальон успешно сохраняет изображение. Я не могу понять, в чем проблема. Куда копать? Есть проблема в клиенте или сервере?