首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MultipartRequest发送post表单数据请求时遇到问题

问使用MultipartRequest发送post表单数据请求时遇到问题
EN

Stack Overflow用户
提问于 2022-08-27 23:00:05
回答 1查看 149关注 0票数 0

你好吗?

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

​

​

这是我的颤振代码:

代码语言:javascript
复制
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服务器,另一个是返回。

然而,当我按下“发送”按钮时,我得到了这个错误:

代码语言:javascript
复制
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)

如果有人能帮我一把,我会非常感激的。祝您今天愉快!

EN

回答 1

Stack Overflow用户

发布于 2022-08-28 17:49:29

将物理设备和主机连接到同一个wifi网络,并将此行上的URL更改为主机的IP地址。

代码语言:javascript
复制
var uri = Uri.parse('http://127.0.0.1:5000/analyze');

要查找主机的IP地址,请打开命令提示符(用于windows)或终端(用于mac或linux)并键入ipconfig并查找ipv4地址并将127.0.0.1替换为IP Address,这样就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73514945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档