0

我正在尝试使用 SAPUI5 (Jquery / AJAX) 发布方法调用表单识别器 API。我可以使用 RESTAPI 客户端阅读相同的 pdf。从 Javascript 调用 API 时会出现以下错误。

问题似乎与 ajax post 方法主体中的数据有关。非常感谢任何建议/帮助。

错误信息 :

415 不支持的媒体类型 {"error":{"code":"2018","innerError":{"requestId":"a12dc9f8-b22f-4602-85d8-7330b16593f7"},"message":"内容解析错误。" }}

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);
},
4

1 回答 1

0

您可以使用atobjavascript 函数来解码 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);
            }
    });

要从 pdf 中获取纯 base64 字符串,您可以使用此网站进行测试:https ://base64.guru/converter/encode/pdf

于 2020-10-15T21:29:58.500 回答