2016-04-29 14 views
-1

私のjavascriptでは、私はダウンロードリンクとして提供したいbase64でエンコードされたpkcs12オブジェクトを持っています。ダウンロードするPkcs12(pfx)ファイルはバイナリデータです。バイナリデータ用のcreateObjectUrlは失敗します

だから私は、オブジェクトをデコードし、それからいるObjectURLを作成しようとしました:

var bin = atob(pkcs12); 
var blob = new Blob([bin], 
     { type : 'application/x-pkcs12' }); 
$scope.pkcs12Blob = (window.URL || window.webkitURL).createObjectURL(blob); 

問題は、ダウンロードしたファイルは、元のバイナリデータよりも大きいとPKCS12として認識されていないこと、です。 utf-8/unicodeのものがファイルに導入されたように見えます。

オリジナルのbase64エンコードデータをcreateObjectURLに提供し、base64エンコードファイルをダウンロードすると、ダウンロードしたファイルをデコードして有効なp12ファイルを取得できます。

私は疑問に思っています:createObjectURLはバイナリデータのためにどのように機能しますか?

+0

、完璧に働いた:このコードは魅力のように働いたhttp://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript – cornelinux

+0

あなたがそれを理解したなら、あなた自身の質問に答えることができますhttp://stackoverflow.com/help/self-answer – Lesley

答えて

0

何らかの理由で、createObjectURLはバイナリ文字列を受け入れませんが、バイト配列を必要とします。私はこれを見つけた

var bytechars = atob($scope.enrolledToken.pkcs12); 
var byteNumbers = new Array(bytechars.length); 
for (var i = 0; i < bytechars.length; i++) { 
    byteNumbers[i] = bytechars.charCodeAt(i); 
} 
var byteArray = new Uint8Array(byteNumbers); 
var blob = new Blob([byteArray], {type: 'application/x-pkcs12'}); 
$scope.pkcs12Blob = (window.URL || window.webkitURL).createObjectURL(blob); 
関連する問題