我正在尝试将屏幕截图文件发送到服务器。我尝试使用multipart请求,但是我得到的只是所陈述的错误,我不明白为什么它无法检索文件的长度。
这是我的代码:
unikId = '01-$ idcompny- $ times- $ id';
RenderRepaintBoundary boundary2 =
screen.currentContext.findRenderObject();
ui.Image image2 = await boundary2.toImage();
ByteData byteData2 =
await image2.toByteData(format: ui.ImageByteFormat.png);
final bytes = byteData2.buffer.asUint8List();
bool res = await _imageSaver.saveImage(
imageBytes: bytes,
directoryName: "hourmeter",
imageName: unikId,
);
File lokasiGambar = new File('$unikId.png');
var stream =
// ignore: deprecated_member_use
new http.ByteStream(DelegatingStream.typed(lokasiGambar.openRead()));
var length = await lokasiGambar.length();
var uri =
Uri.parse("http://103.30.247.115:80/flutter_php/upload_gambar.php");
var request = new http.MultipartRequest("POST", uri);
var multipartFile = new http.MultipartFile("image", stream, length,
filename: basename(lokasiGambar.path));
request.fields['idcom'] = idcompny;
request.files.add(multipartFile);
var response = await request.send();
if (response.statusCode == 200) {
show('Image Has Been Saved');
} else {
show('Failed To Save!');
}
} on SocketException catch (_) {
show('Image has been saved and pending to server');
if (_signal == 'not connected') {
var unikId;
var times = DateTime.now().millisecondsSinceEpoch;
var rng = new Random();
var id;
for (var i = 0; i < 10; i++) {
id = rng.nextInt(1000);
}
unikId = '02-$idcompny-$times-$id';
RenderRepaintBoundary boundary2 =
screen.currentContext.findRenderObject();
ui.Image image2 = await boundary2.toImage();
ByteData byteData2 =
await image2.toByteData(format: ui.ImageByteFormat.png);
final bytes = byteData2.buffer.asUint8List();
bool res = await _imageSaver.saveImage(
imageBytes: bytes,
directoryName: "TempImg",
imageName: unikId,
);
}
}