2016-04-14 13 views
0

asp.NET MVC5アプリケーションでFineUploaderを使用しようとしています。私のコントローラで、FineUploaderを使用してファイルをアップロードしようとすると、ポリシー文書をBase64でエンコーディングし、ベース64エンコーディングされたドキュメントに署名し、その結果をドキュメントに従ってJSONオブジェクトとして返します。しかし、コントローラーがJSONを返すと、私のページに次のエラーが表示されます。FineUploader - JSONレスポンスのエラー - 「レスポンスにbase64でエンコードされたポリシーが含まれていません!」

"レスポンスには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でエンコードされているものだけです。署名は16進文字列です。ペイロードのサンプルは次のとおりです。

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

「Base64」ポリシーの「...」は、簡潔さのためのものです。

ResponseにはBase64でエンコードされたポリシーは含まれていませんが、Base64でエンコードされたポリシーは含まれているようです。私の署名が間違っている可能性はありますか?私はバイト配列として署名を計算した後、それは16進文字列に変換されませんか?ここで

はクロームによると、実際のpayploadです:

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

なぜ有効なJSONではないのか判断できません。私が知る限り、これは書類に書かれている形式です。 - http://docs.fineuploader.com/endpoint_handlers/amazon-s3.html – jjspierx

答えて

1

エラーはあなたのコードにあるように見えるん。あなたはあなたの答えに示しているよう応答ペイロードは、このです:

"{...}" 

しかし、それはこのようになります。JSON.parseを通じてあなた応答を実行した後

{...} 

、結果は単一の文字列でありますオブジェクトの代わりに。

+1

パーフェクト。 asp.NETアプリケーションでこれを試している人は、JsonResultを返すので、JSONオブジェクトの代わりにJSONが文字列にラップされて返されていたようです。 FineUploaderは引用符で囲むため、JsonResultオブジェクトは受け付けません。コントローラの戻り値の型を "JsonResult"ではなく "string"に設定すると、FineUploaderはその文字列をJSONオブジェクトとして解析します。 – jjspierx

+1

この問題は、Fine Uploaderインスタンスでこの問題が発生していても、実際にはFine Uploaderとは何の関係もないことに注意してください。 Fine Uploaderが受信JSON応答データを解析するために使用する 'JSON.parse'は、Web APIの一部です。 JSONデータを解析する必要がある他のライブラリは、同じ呼び出しを使用します。 –

関連する問題