Проблема Flutter SocketException с большими изображениями на ios

У меня есть метод публикации изображения в api django-rest. Он хорошо работает с изображениями небольшого размера. Но когда дело доходит до 900 КБ или более (например, изображений ios), это занимает некоторое время и дает мне эту ошибку (также эта проблема возникает, когда я использую устройство ios. Нет проблем с Android):

SocketException: ошибка ОС: сброс соединения одноранговым узлом, errno = 54, адрес = 192.168.1.1, порт = 52842

Вот код:

postImage(
    BuildContext context, String name, String description, var image) async {
  SharedPreferences preferences = await SharedPreferences.getInstance();
  final url = "http://192.168.1.1/posts/";
  final uri = Uri.parse(url);
  final subject = BehaviorSubject<Map<String, dynamic>>();
  Map<String, dynamic> responseDetail;
  var response;

  var request = http.MultipartRequest('POST', uri);
  request.headers[HttpHeaders.authorizationHeader] =
      'Token ${preferences.getString('Key')}';
  request.headers[HttpHeaders.acceptHeader] = 'application/json';
  request.fields['name'] = name;
  request.fields['description'] = description;
  if (image != null) {
    var length = await image.length();
    var stream = http.ByteStream(DelegatingStream.typed(image.openRead()));
    request.files.add(http.MultipartFile('image', stream, length,
        filename: basename(image.path),));
  } else {
    request.fields['image'] = '';
  }
  try {
    response = await request.send();
    if (response.statusCode != 201) {
      response.stream.transform(utf8.decoder).listen((value) {
    responseDetail = json.decode(value);
  }, onDone: () {
    subject.add(responseDetail);
    subject.close();
  });
  return subject.share();
}
return response.statusCode;
  } catch (e) {
print(e);
}
}

В чем проблема?


person artick    schedule 09.03.2019    source источник
comment
Похоже на проблему на стороне сервера. Советую посмотреть ограничения размера API   -  person Mazin Ibrahim    schedule 09.03.2019
comment
@MazinIbrahim Я просто проверил его и узнал, что он хорошо работает на устройстве Android для изображений большого размера. Это просто на стороне ios.   -  person artick    schedule 09.03.2019


Ответы (1)


Это было из-за nginx client_max_body_size. Если у кого-то еще есть эта проблема, перейдите по пути /etc/nginx/nginx.conf и добавьте эту строку client_max_body_size 20M; в часть http. и в конце делаем service nginx reload.

person artick    schedule 24.03.2019