Flutter:如何将 POST 图像 http 到 Microsoft 认知服务

Flutter: How to http POST image to Microsoft Cognitive Services

我正在尝试 POST 从相机拍摄的图像到 Microsoft 认知服务的人脸 API(使用 Face - Detect method)。但是,当我尝试 returns 时 'Response 415':

{
    "error": {
        "code": "BadArgument",
        "message": "Invalid Media Type."
    }
}

这是我的这个方法的代码:

final bytes = image.readAsBytesSync();

var uri = Uri.parse("https://australiaeast.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false");
var request = new http.MultipartRequest("POST", uri);
var multipartFile = new http.MultipartFile.fromBytes('url', bytes, contentType: new MediaType('image', 'jpeg'));

request.headers['Ocp-Apim-Subscription-Key'] = "9c261636281d42c0947d89fe3982df73";
request.headers['Content-Type'] = "application/octet-stream";
request.files.add(multipartFile);

var response = await request.send();
print(request);
print(response.statusCode);
response.stream.transform(utf8.decoder).listen((value) {
      print(value);
    }

我使用 Flutter Image Picker 插件拍摄照片并使其在屏幕上正常显示。我在 Microsoft Cognitive Services 上尝试过的所有其他操作都工作正常 - 只是上传这张图片给我带来了问题。

我认为你不需要 MultipartRequest 而只需要 Request 并分配 bodyBytes 属性:

final bytes = image.readAsBytesSync();

var uri = Uri.parse("https://australiaeast.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false");
var request = new http.Request("POST", uri)
  ..headers['Ocp-Apim-Subscription-Key'] = "9c261636281d42c0947d89fe3982df73"
  ..headers['Content-Type'] = "application/octet-stream"
  ..bodyBytes = bytes;

var response = await request.send();
print(request);
print(response.statusCode);
response.stream.transform(utf8.decoder).listen((value) {
  print(value);
});