JavaScriptのフロントエンドの実装をbase64写真ダウンロード(IE10 +との互換性、クロム、Firefoxの)

 互換性のないつまり、ではないオリジナルの作者に時間のおかげで多くを費やし、FFと互換性がありません。

背景

プロジェクトの開発プロセスでは、輸出需要の絵は、多くの場合、ダウンロードにグラフをエクスポートする必要があり、特にチャートなどを使用したアプリケーションのために、しばしばあります。

ダウンロードはChromeと他の現代のブラウザでbase64で絵を達成比較的簡単です。

  1. ラベルaを作成します。
  2. base64エンコードの画像に割り当てられたタグのhref属性
  3. ダウンロードしたファイルの名前として、ラベルのダウンロードプロパティを指定します
  4. トリガクリックイベントタグ

しかし、このロジックはIEでは動作しません、直接のエラーを書きました。

次のIEは別途に対処する必要があるので、ここではIEような文書を扱う単一の方法を提供する:window.navigator.msSaveOrOpenBlob(ブロブ、download_filename)直接IEのダウンロードをトリガすることができ、このメソッドを呼び出すと、それは非常に簡単です。具体的には、以下:

(BASE64画像/ PNG:データこのセクションのようなマイナスの前述の説明は、データコンテンツインターセプト// BASE64 ) とバイナリデータに復号
VAR BSTR = ATOB(imgUrl.split( ' ')[1 ])
//バイナリデータは、後続のコンテナを作成するために、復号されたバイナリデータの長さを取得
VARが= N-bstr.length 
バイナリデータストアにアレイのUint8Arrayタイプを作成// 
(N)=新しい新しいUint8Array u8arr VARを
//バイナリUint8Array配列データ・タイプ
ながら(N--){ 
 u8arr [N- = bstr.charCodeAt(N)
} 
//ブロブ作成
VARを=新しい新しいブロブブロブ([u8arr])
//ブラウザがメソッドを呼び出し、ダウンロードプロセスIE呼び出す
window.navigator.msSaveOrOpenBlob(ブロブを、 'チャート・ダウンロード ' + '' + 'PNG')

  //ここにコードをbase64エンコードに全体像を取得することで、ここでは効果のconst imgUrl =見て、自分自身をテストするために、ここで符号化された画像の交換であることを、カザフスタンの一例である「データを:画像/ PNG; base64で、...」

ブラウザが(IEブラウザを使用する場合、ある)msSaveOrOpenBlob方法をサポートしている場合//、次にダウンロード画像にメソッドを呼び出す
(window.navigator.msSaveOrOpenBlob){IF 
 VAR = BSTR ATOB(imgUrl.split( '')[1 ])
 VAR = N-bstr.lengthの
 新しい新Uint8Array u8arr VAR =(N-) 一方(N--){ 
  u8arr [N- = bstr.charCodeAt(N)
 } 
 VAR =新しい新しいBLOB BLOB([u8arr])
 window.navigator.msSaveOrOpenBlob (BLOB、 'チャート・ダウンロード' + '' + 'PNG')
}他{ 
 //ここで処理された新しいブラウザクロムに従ってなど
 のconst A =のdocument.createElement( 'A')
 a.href = URL.createObjectURL (BLOB); // imgUrlため
 a.setAttribute( 'ダウンロード'、 'チャート・ダウンロード')
//a.click()

 a.dispatchEvent(MouseEventの新しい新しい( 'クリックして' {泡:trueの場合、ビューに:、真の解約に:ウィンドウ})); //互換性のFirefox 
}

 互換性のないつまり、ではないオリジナルの作者に時間のおかげで多くを費やし、FFと互換性がありません。

<IMG名= "PIC1" /> 
        の<input type = "ボタン"値= "下载" onclickの= "ダウンロード( 'IMG1')"> 
    <スクリプト> 
        VAR RET =」/ 9J / 4AAQSkZJRgABAQAAAQABAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJ 
C4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL / 
wAARCAB + AGYDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0K
xwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDx
MXGx8jJytLT1NXW19jZ2uHi4 Tl5ufo6erx8vP09fb3 + + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBU
QdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqK
mqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6 / 9oADAMBAAIRAxEAPwD36iiigAooryj4k / FO + HLmTSNFjSXUFAMk7EMkee2Ac7v8QfagTdj1Ka5t7
fHnzxRZ6b3C5 / Ouf1zx / wCGPDyn7fq8AkAB8qJvMcg9wo5r5K1TWdR1Wdpr + 8nuZCS2ZXJxnrgdAPYUzS4BcXDJIPl2MR9cUrk8x77e / tA6HBftHbafd3NqpA80AKT9Aa7XRfiR "; document.allの[ 'PIC1'] SRC = "データ:画像/ JPG、BASE64、" + RET; //下载图片 機能ダウンロードは、(){ imgData =う"データ:画像/ JPGと、BASE64、" + RET; this.downloadFile( '测试.PNG'、imgData); } //下载 機能downloadFile(ファイル名、コンテンツ){ ALINK =文書を聞かせています。createElement( 'A'); BLOB = this.base64ToBlob LET(コンテンツ); //新しい新しいブロブ([内容]); のlet EVT = document.createEvent( "HTMLEvents"); evt.initEvent( "クリック"、真の、真の); // initEventなしFFで後者の二つのパラメータ、ブラウザのデフォルトの動作を防止するかどうか、バブリングするかどうか、イベントの種類を文句を言うだろう aLink.download =ファイル名を、 aLink.href = URL.createObjectURL(BLOB); // aLink.dispatchEvent(EVT) のALink .click() } // Base64でターンBLOBの 関数base64ToBlob(コード){ LET部分が= code.split( '; Base64で、'); せて部品のcontentType = [0] .split( ':')[1]; せRAW window.atob =(パーツ[1]); LET rawLength = raw.length; 聞かせてuInt8Array =新しいUint8Array(rawLength)。 {(; I <rawLength ++ iが0 =せて)ため uInt8Array [I] = raw.charCodeAt(I)。 } 新しいブロブ([uInt8Array]、{タイプ:のcontentTypeを})を返します。 } </ SCRIPT>

  

リファレンス

https://www.jb51.net/article/147431.htm

https://www.bbsmax.com/A/q4zVb7OlzK/

https://www.cnblogs.com/MR-cui/p/9996548.html

おすすめ

転載: www.cnblogs.com/venje/p/12109626.html