Отправка изображения с сервера Android Retrofit на сервер Django - PullRequest
0 голосов
/ 26 апреля 2020

Проблема в том, что я, наверное, уже сижу целый день и ломаю себе голову. Требуется отправить обычный запрос 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 дооснащения, но в то же время при отправке через Почтальон успешно сохраняет изображение. Я не могу понять, в чем проблема. Куда копать? Есть проблема в клиенте или сервере?

...