Я исчерпал все опции, представленные в нескольких вопросах, похожих на этот. Я звоню в Face API из javascript и пытаюсь отправить изображение, снятое с веб-камеры, в виде потока октетов.
У меня есть холст, который отображает изображение, снятое с веб-камеры, и используя приведенный ниже скрипт (благодаря потокам переполнения стека :)) для преобразования dataURI из холста в BLOB-объект.
$.ajax({
url: '//detect?returnFaceAttributes=age,gender',
type: 'POST',
headers: {
"Authorization": "XXXXX"
},
processData: false,
contentType: "application/octet-stream",
data: that.makeblob(snapShotCanvas.toDataURL('image/jpeg'))
})
.done(function (data) {
console("success");
})
.fail(function () {
console("error");
});
makeblob: function (dataURI) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
var byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
// create a view into the buffer
var ia = new Uint8Array(ab);
// set the bytes of the buffer to the correct values
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// write the ArrayBuffer to a blob, and you're done
var blob = new Blob([ab], {
type: mimeString
});
return blob;
},
Я получаю сообщение об ошибке
"{" requestId ":" 5dc19c1ce4b053181ca5c9dd "," message ":" Невозможно проанализировать составное тело "}"
Кажется, что полезная нагрузка запроса выглядит следующим образом. Не уверен, что именно так выглядит поток больших двоичных объектов.
ÿØÿàJFIFÿÛC
ÿÛC ÿÀ @@ "ÿÄ ÿÄ?! 1AQ" aq2 # B ¡± RÁð $ Ñábñ3% 4CÿÄÿÄ '! 1A "Qa #2qBÿÚ? ÚkÔ: ¤pY · ¦ßßUV³vò] HÁÉ | ´Fï \ ÛÛd [nFï @ .. Z <3³cØÖGþdzk¨F ÁW * Ê% FàÌìH lSÙBÉ1f <code>§n3ö¦i.Q°Ë}ZÁ%¤UÉúd¨h.ÒM²[Éê)~E=µº6¨Ê>Yø§Wʤ{®h&9·çJ¹B}ùqþA& ?ЪÄDC2üÛ{c½bVpS¸ASÑÆAÎ;yHÇÇÍN?¤àÚ´7'Ó¥or+y_ãJº¶Í»Á q »ÚdY0Fà ê @BÀu ¢ ÝÙË¡§Í