Трепетание: как http-образ POST для Microsoft Cognitive Services - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь отправить изображение, снятое с камеры, в API-интерфейс Face для Microsoft Cognitive Service (используя метод определения лица ). Тем не менее, когда я пытаюсь, он возвращает «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, работают нормально - только загрузка этого изображения вызывает у меня проблемы.

1 Ответ

0 голосов
/ 05 ноября 2018

Я думаю, вам не нужно 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);
});
...