Распознаватель форм Anzalyze: ошибка загрузки данных - 415

Я пытаюсь вызвать API распознавания форм с помощью метода отправки SAPUI5 (JQuery / AJAX). Я могу читать тот же PDF-файл с помощью клиента RESTAPI. API при вызове из Javascript выдает следующую ошибку.

Проблема, похоже, связана с данными в теле метода ajax post. Любые предложения / помощь приветствуются.

Сообщение об ошибке :

415 Неподдерживаемый тип носителя {error: {code: 2018, innerError: {requestId: a12dc9f8-b22f-4602-85d8-7330b16593f7}, message: Content parsing error.}}

Код Javascript:

onChange: function(oEvent) {
    //  var that = this;
    var reader = new FileReader();
    var file = oEvent.getParameter("files")[0];
    var raw;

    reader.onload = function (e) {
        raw = e.target.result;
        //alert(raw);
        var sUrl2 = "https://formrecognizerforsap.cognitiveservices.azure.com/formrecognizer/v1.0-preview/custom/models/{mymodelid>/analyze";

        jQuery.ajax({
            type: "POST",
            url: sUrl2,
            context: this,
            crossDomain: true,
            data: raw,
            beforeSend: function (xhr) {
                xhr.setRequestHeader("content-type", "application/pdf");

                xhr.setRequestHeader("ocp-apim-subscription-key", "my-subscription id");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                sap.m.MessageToast.show(errorThrown);
            },
            success: function (oData, status, jqXHR) {
                sap.m.MessageToast.show(status);
            }

        });


    };

    reader.onerror = function (e) {
        sap.m.MessageToast.show("error");
    };
    reader.readAsDataURL(file);
},

person Kumaran L    schedule 10.05.2020    source источник
comment
Могу ли я узнать, как выглядит исходный формат (данные)?   -  person Codenewbie    schedule 10.05.2020
comment
исходный вывод - это что-то вроде data: application / pdf; base64, JVBERi0xLjMNCiXi48 / TDQolUlN ..... Я попытался опубликовать, используя data: application / pdf; base64, JVBERi всю строку, а также удалив data: application / pdf; base64. В обоих случаях ошибка одинакова. Кроме того, я могу сгенерировать PDF, используя необработанные данные в веб-ссылке Base64 to PDF.   -  person Kumaran L    schedule 10.05.2020


Ответы (1)


Вы можете использовать atob функцию javascript для декодирования строки Base64 (ссылка)

Пример:

    //plain text base64 WITHOUT datacontent and other stuff
    let base64string = "JVBERi0xLjQKJ..."
    
    let byteCharacters = atob(base64string);
    
    jQuery.ajax({
            type    : "POST",
            url     : "<form recognizer url endpoint>",
            context : this, 
            crossDomain: true,
            data: byteCharacters,
            beforeSend: function(xhr) {
    
                xhr.setRequestHeader("ocp-apim-subscription-key", "<your_key>");
    
                //To avoid specify pdf or image type use octet-stream
                xhr.setRequestHeader("content-type", "application/octet-stream");            
    
            },
            error   : function(jqXHR, textStatus, errorThrown) {
                console.error(errorThrown);
                },
            success : function(oData, status, jqXHR) {
                console.info(status);
            }
    });

Чтобы получить простую строку base64 из pdf, вы можете использовать этот веб-сайт для тестирования: https://base64.guru/converter/encode/pdf

person gsubiran    schedule 15.10.2020