当前位置: 首页 > 知识库问答 >
问题:

如何在Dart/Flutter中向api发送图像?

穆毅然
2023-03-14
  void onTakePictureButtonPressed() {
    takePicture().then((String filePath) {
      if (mounted) {
        setState(() {
          imagePath = filePath;
          videoController?.dispose();
          videoController = null;
        });

        http.post('http://ip:8082/composer/predict', headers: {
          "Content-type": "multipart/form-data",
        }, body: {
          "image": filePath,
        }).then((response) {
          print("Response status: ${response.statusCode}");
          print("Response body: ${response.body}");
        });


        if (filePath != null) showInSnackBar('Picture saved to $filePath');
      }
    });
  }

共有1个答案

沈博涉
2023-03-14

最简单的方法是发布一个多部分请求,如本文中所示,然后将其发布到服务器。

确保在文件的开头导入这些内容:

import 'package:path/path.dart';
import 'package:async/async.dart';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'dart:convert';

代码中添加此类:

upload(File imageFile) async {    
      // open a bytestream
      var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
      // get file length
      var length = await imageFile.length();

      // string to uri
      var uri = Uri.parse("http://ip:8082/composer/predict");

      // create multipart request
      var request = new http.MultipartRequest("POST", uri);

      // multipart that takes file
      var multipartFile = new http.MultipartFile('file', stream, length,
          filename: basename(imageFile.path));

      // add file to multipart
      request.files.add(multipartFile);

      // send
      var response = await request.send();
      print(response.statusCode);

      // listen for response
      response.stream.transform(utf8.decoder).listen((value) {
        print(value);
      });
    }
upload(File(filePath));
void onTakePictureButtonPressed() {
    takePicture().then((String filePath) {
      if (mounted) {
        setState(() {
          imagePath = filePath;
          videoController?.dispose();
          videoController = null;
        });

       // initiate file upload
       Upload(File(filePath));

        if (filePath != null) showInSnackBar('Picture saved to $filePath');
      }
    });
  }
 类似资料:
  • 我需要将下面的类中的数据传递到我的Flitter应用程序,其中的数据仅在来电事件发生时可用。我需要将此数据(mobileNumber)传递给颤振(如果可能,即使颤振应用程序终止,我也需要传递数据) 广播接收器。Java语言 }根据以上代码,我需要将incomingNumber传递给Flatter。如果可能-即使应用程序已关闭,也要共享数据。 MainActivity.java 目前,即使应用程序被

  • 我正在用facebook信使API在nodejs中构建一个facebook机器人。我试图通过直接上传heroku服务器本身的图像文件(而不是通过URL),从机器人发送图像,但它不起作用。 以下是控制台的错误日志。 调用Send API 400错误请求失败{消息:'(#100)上载的文件数不正确。必须只上载一个文件。',类型:'OAuthException',代码:100,error_subcode

  • 我试图使用Vapor 1.5和Firebase遗留协议向Firebase Notifications API发出POST请求,但收到失败响应。 编辑通过邮递员发出请求失败,错误为“请求缺少身份验证密钥(FCM令牌)”

  • CORS错误似乎是web领域中众所周知的问题。但我第一次尝试了FlitterWeb,我遇到了严重的错误。 下面的代码在iOS设备上运行时在应用程序版本中运行良好,但当我在Chrome上通过beta频道的web调试测试相同的代码时,它遇到了CORS错误。 其他stackoverflow的回答解释了如何用他们项目的服务器端文件解决CORS问题。但是我完全不知道什么是服务器的东西,以及如何处理他们的答案

  • 在官方的googleapi库中,get方法只接受“数据!A1: D4",其中Data是工作表的名称,A1: D4是选择范围。但是如何发送选择请求,例如通过单元格值或最大/最小值? 我确信Google有一种结构化查询语言sq,它类似于sql。我甚至在库的2和3版本中找到了此类请求的示例。

  • 创建电报机器人并获得机器人令牌后,我想向机器人应用编程接口发送请求。 这个链接说我们必须像这样发送HTTP请求: