首页 > 解决方案 > 使用 Flutter 将图像发布到 Web 服务

问题描述

我目前正在使用 Flutter 和 Dart 尝试将图像发送到 Web 服务,然后等待 JSON 响应。下面的链接显示了我试图模仿的 Postman 请求。

带有所需标题的 Postman 图像

邮递员与身体的图像

我认为我遇到的问题要么没有正确设置我的请求的标头,要么没有正确编码图像。

目前我收到 HTTP 400 错误。

我尝试在 StackOverflow 上遵循这些建议的解决方案,但一直收到 HTTP 400 错误。

任何帮助将非常感激!

标签: restweb-servicespostdartflutter

解决方案


试试这个。如果你还没有的话,我建议你自己创建一个简单的 Dart 项目。这样您就可以在不需要手机模拟器等的情况下进行测试。

main() async {
  http.MultipartRequest request =
      new http.MultipartRequest('POST', Uri.parse(url));

  request.headers['Prediction-Key'] = '3f4a......'; // todo - insert real value

  request.files.add(
    new http.MultipartFile.fromBytes(
      'image',
      bytes,
      filename: 'somefile', // optional
      contentType: new MediaType('image', 'jpeg'),
    ),
  );

  http.StreamedResponse r = await request.send();
  print(r.statusCode);
}

如果文件在磁盘上,而不是在内存中,则使用fromPath命名构造函数。尝试不同的媒体类型。我用过image/jpeg,你可以试试application/octet-stream

顺便说一句,在您的第一个屏幕截图中,您显示了一个内容类型,但 Postman 忽略了这一点,因为整体内容类型被 multipart-form 覆盖。在 Postman 中取消选中该行以证明这一点。

最近在 SO 上还有另一个问题,服务器错误地期望标头区分大小写。在邮递员中,再次尝试使用小写prediction-key来证明服务器不介意小写标题(这是 Dart 使用的)。


推荐阅读