简体   繁体   English

使用Ajax从Web API获取二进制数组时,无法从文本转换为arraybuffer

[英]No conversion from text to arraybuffer when using Ajax to get binary array from web api

I am trying to receive binary array from web api from ajax client, 我正在尝试从Ajax客户端从Web API接收二进制数组,

In my Api Controller I have: 在我的Api控制器中,我有:

[ HttpGet ]
[ Route( "Connection/ImageData" ) ]
public byte[] GetImageData()
{
    return new byte[1];
}

In my JavaScript I have: 在我的JavaScript中,我有:

function RenderImage() {
    try {

        $.ajax({
            url: "/Connection/ImageData",
            dataType: "arraybuffer",
            success: function(response) {                  
               //success!
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
               //api error;
            }
        });
    } catch (err) {
        //calling error
    }
}

I get the error: 我得到错误:

No conversion from text to arraybuffer

The returned byte array will be converted into text in some way, depending on how the MediaTypeFormatterCollection is set up on the server and on the format requested by the HTTP client with the Accept header. 返回的字节数组将以某种方式转换为文本,具体取决于服务器上MediaTypeFormatterCollection的设置方式以及HTTP客户端使用Accept标头请求的格式。 The bytes will typically be converted to text by base64-encoding. 通常,这些字节将通过base64编码转换为文本。 The response may also be packaged further into JSON or XML, but the ratio of the expected length (528) to the actual length (706) seems to indicate a simple base64 string. 响应也可以进一步打包为JSON或XML,但是预期长度(528)与实际长度(706)之比似乎表示一个简单的base64字符串。

Reference : https://stackoverflow.com/a/23884624/10201850 参考: https : //stackoverflow.com/a/23884624/10201850

Try the following code : 试试下面的代码:

Controller 调节器

    [HttpGet]
    [Route("Connection/ImageData")]
    public string GetImageData()
    {
        var bytes = new byte[3] { 0,12,246 };
        var data = Convert.ToBase64String(bytes);
        return data;
    }

Javascript : using base64ToArrayBuffer function: Javascript:使用base64ToArrayBuffer函数:

<script type="text/javascript">

    function base64ToArrayBuffer(base64) {
        var binaryString = window.atob(base64);
        var binaryLen = binaryString.length;
        var bytes = new Uint8Array(binaryLen);
        for (var i = 0; i < binaryLen; i++) {
            var ascii = binaryString.charCodeAt(i);
            bytes[i] = ascii;
        }
        return bytes;
    }
    $("#btnclick").click(function () {
        try {
            $.ajax({
                url: "/Connection/ImageData",
                //dataType: "arraybuffer",
                success: function (response) {
                   var result= base64ToArrayBuffer(response);
                    console.log(result);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    console.log(errorThrown);
                    //api error;
                }
            });
        } catch (err) {
            //calling error
        }

    });
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM