FineUploader - JSON响应出错 - “响应不包括base64编码的策略!”

时间:2016-04-14 13:20:06

标签: json encoding amazon-s3 fine-uploader

我正在尝试在asp.NET MVC5应用程序中使用FineUploader。当我尝试使用FineUploader上传文件时,在我的Controller中,我是对策略文档进行Base64编码,对基本64位编码文档进行签名,然后根据文档将结果作为JSON对象返回。但是,在Controller返回JSON之后,我在页面上收到以下错误:

“响应不包括base64编码的策略!”

我的JSON有效负载的格式化一定有问题。这里是代码的相对部分:

byte[] byteArrayPolicy = System.Text.Encoding.UTF8.GetBytes(jsonStringFull);
        string base64Policy = Convert.ToBase64String(byteArrayPolicy);

        var signature = kha.ComputeHash(Encoding.UTF8.GetBytes(base64Policy));
        var signatureString = ToHexString(signature, true);

        string  payloadString = @"{ ""policy"":""" + base64Policy + @"""," + @"""signature"":""" + signatureString + @"""}";

        JsonResult jsonRequest = Json(payloadString);

        return jsonRequest;

我要返回的JSON对象格式化有什么问题吗?该策略是我从FineUploader收到的策略的精确副本,只是它已经被Base64编码。签名是十六进制字符串。以下是有效负载的示例:

"{ \"policy\":\"eyJleH...=\",\"signature\":\"da186a017b038382e2cc21dfa4f1fbf806c51adf92984a9b95f1aa845aeb72e4\"}"

注意Base64政策中的“......”是为了简洁起见。

我得到的错误说响应不包含Base64编码策略,但在我看来它确实包含Base64编码策略。我的签名可能不正确吗?在将签名计算为字节数组后,它是否应该转换为十六进制字符串?

这是实际的paypload,根据Chrome:

"{ \"policy\":\"eyJleHBpcmF0aW9uIjoiMjAxNi0wNC0xNFQxNDo0MzozMS4zOTZaIiwiY29uZGl0aW9ucyI6W3siYWNsIjoicHJpdmF0ZSJ9LHsiYnVja2V0IjoiZnVuZHRoZWZ1bmVyYWwifSx7IkNvbnRlbnQtVHlwZSI6ImltYWdlL2pwZWcifSx7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6IjIwMCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsia2V5IjoiNGZkOGIzMDMtMmQ3Zi00MWJlLThiYWItYzUyMjBiNmRlMjQ1LmpwZyJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUFKUkhDU09STExFUkpVMkVBLzIwMTYwNDE0L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IngtYW16LWRhdGUiOiIyMDE2MDQxNFQxNDM4MzFaIn0seyJ4LWFtei1tZXRhLXFxZmlsZW5hbWUiOiIyMDE2LTAzLTI0LmpwZyJ9XX0=\",\"signature\":\"c592b3bca0dedba10301e06df37760cb527ac0a83112ae9b668dce00f0b23465\"}"

1 个答案:

答案 0 :(得分:1)

错误似乎出现在您的代码中。正如您在答案中所说明的,响应有效负载是:

function changeColorOnHover(elementClass) {
    var $element = $(elementClass);

    $element
        .on('mouseenter', function (event) {
            // store a reference to this element
            var $this = $(this);

            $this.addClass('is-hover');
        })
        .on('mouseleave', function (event) {
            // store a reference to this element
            var $this = $(this);

            $this.removeClass('is-hover');
        });
}

但它应该是这样的:

"{...}"

通过{...} 运行您的响应后,结果是一个字符串而不是一个对象。