rest - 使用 Flutter 将图像发布到 Web 服务
问题描述
我目前正在使用 Flutter 和 Dart 尝试将图像发送到 Web 服务,然后等待 JSON 响应。下面的链接显示了我试图模仿的 Postman 请求。
我认为我遇到的问题要么没有正确设置我的请求的标头,要么没有正确编码图像。
目前我收到 HTTP 400 错误。
我尝试在 StackOverflow 上遵循这些建议的解决方案,但一直收到 HTTP 400 错误。
任何帮助将非常感激!
解决方案
试试这个。如果你还没有的话,我建议你自己创建一个简单的 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 使用的)。
推荐阅读
- ms-access - 访问计算机时访问表单分辨率的变化
- sql-server - 我的 UPDATE 语句 WHERE NOT EXISTS 有什么问题?
- jmeter - 计算 JMeter 中的平均响应时间计算
- java - mouseListener:按下、单击和拖动的组合
- c# - 如何向未初始化的变量添加内容?C#
- python - 标记发生在两个 futuristc 事件之间的特定事件
- android - 将图像分享到 Google Lens 的意图
- nginx - 在 nginx 服务器上部署 CodeIgniter 3 项目后出现错误 500
- amazon-mws - Amazon SP API 获取内部服务器错误
- android - Android OkHttp TLS Mutual Auth - 客户端不向服务器发送证书