你好吗?
我正在做一个个人项目,试图使用Flutter将图像+其他信息发送到我的web服务器,使用表单数据格式的post请求。下面是邮递员的一个例子:

这是我的颤振代码:
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class ConfirmationScreen extends StatefulWidget {
final XFile? pictureFile;
final String uri = 'http://127.0.0.1:5000/analyze';
final Position? position;
const ConfirmationScreen({this.pictureFile, this.position, Key? key}) : super(key: key);
@override
State<ConfirmationScreen> createState() => _ConfirmationScreenState();
}
class _ConfirmationScreenState extends State<ConfirmationScreen> {
Future<void> uploadImage ()async{
var stream = http.ByteStream(widget.pictureFile!.openRead());
stream.cast();
var length = await widget.pictureFile!.length();
var uri = Uri.parse('http://127.0.0.1:5000/analyze');
var request = http.MultipartRequest('POST', uri);
request.fields['taken_at'] = "18/09/19 01:55:19" ;
request.fields['latitude'] = widget.position!.latitude.toString();
request.fields['longitude'] = widget.position!.longitude.toString();
request.fields['id_camera'] = "2" ;
request.fields['camera_type'] = "phone" ;
request.fields['false_alarm'] = '0' ;
var multiport = http.MultipartFile(
'file',
stream,
length);
request.files.add(multiport);
await request.send() ;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Confirmation")),
body: Column(
children: [
Image.file(File(widget.pictureFile!.path)),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.red,
textStyle: const TextStyle(color: Colors.white)
),
onPressed: (){},
child: const Text("BACK"),),
const Padding(
padding: EdgeInsets.fromLTRB(30.0,0,0,0)),
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.green,
textStyle: const TextStyle(color: Colors.white)
),
// Image.file(File(widget.pictureFile!.path))
onPressed: () async {
uploadImage();
},
child: const Text("SEND"))
],
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
style: const TextStyle(
backgroundColor: Colors.white),
widget.position!.latitude.toString()
)
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
style: const TextStyle(
backgroundColor: Colors.white),
widget.position!.longitude.toString()
)
),
],
),
);
}
}这是个简单的屏幕。我只显示图像和两个按钮。一个是将数据发送到web服务器,另一个是返回。
然而,当我按下“发送”按钮时,我得到了这个错误:
E/flutter (30566): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Connection refused
E/flutter (30566): #0 IOClient.send (package:http/src/io_client.dart:88:7)
E/flutter (30566): <asynchronous suspension>
E/flutter (30566): #1 BaseRequest.send (package:http/src/base_request.dart:133:22)如果有人能帮我一把,我会非常感激的。祝您今天愉快!
发布于 2022-08-28 17:49:29
将物理设备和主机连接到同一个wifi网络,并将此行上的URL更改为主机的IP地址。
var uri = Uri.parse('http://127.0.0.1:5000/analyze');要查找主机的IP地址,请打开命令提示符(用于windows)或终端(用于mac或linux)并键入ipconfig并查找ipv4地址并将127.0.0.1替换为IP Address,这样就可以了。
https://stackoverflow.com/questions/73514945
复制相似问题