ios 上大图像的 Flutter SocketException 问题
Flutter SocketException problem with large images on ios
我有一种将图像发布到 django-rest api 的方法。
它适用于小尺寸图像。但是当涉及到 900 KB 或更多(如 ios 图像)时,它需要一些时间并给我这个错误(而且这个问题只是在我使用 ios 设备时发生。没有问题 android) :
SocketException: OS Error: Connection reset by peer, errno = 54,
address = 192.168.1.1, port = 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);
}
}
有什么问题?
是因为 nginx client_max_body_size
。
如果其他人遇到此问题,请转到 /etc/nginx/nginx.conf
路径并将此行 client_max_body_size 20M;
添加到 http
部分。最后做 service nginx reload
.
我有一种将图像发布到 django-rest api 的方法。 它适用于小尺寸图像。但是当涉及到 900 KB 或更多(如 ios 图像)时,它需要一些时间并给我这个错误(而且这个问题只是在我使用 ios 设备时发生。没有问题 android) :
SocketException: OS Error: Connection reset by peer, errno = 54, address = 192.168.1.1, port = 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);
}
}
有什么问题?
是因为 nginx client_max_body_size
。
如果其他人遇到此问题,请转到 /etc/nginx/nginx.conf
路径并将此行 client_max_body_size 20M;
添加到 http
部分。最后做 service nginx reload
.