JS処理ファイルフロー(画像の場合は現在のページに表示)


ajaxでピクチャリソースを要求し、サーバはファイルストリームとして返されます.
1、戻りタイプは「blob」に設定する必要があるので、元のajaxを使用する必要があり、jqを使用することはできません(理由:jqueryは戻りデータをstringに変換し、blobタイプをサポートしません)(もちろん、コンポーネントを導入してjqを拡張する能力も導入することができます.私が知っているのは、jquery-ajax-blob-arraybuffer.jsです).
2、FileReaderを使用してファイルストリームをbase 64形式に変換する.
3.1、その後、シミュレーションを通じてaタグをクリックしてこのファイルをダウンロードする.
3.2、またはimg要素のsrcプロパティに設定して、現在のページに表示できます.
 
3.1コード:

  var xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);    //      POST  ,    
  xhr.responseType = "blob";  //     blob
  //            ,           /        
  xhr.onload = function () {
    //     
    if (this.status === 200) {
      //   200
      var blob = this.response;
      var reader = new FileReader();
      reader.readAsDataURL(blob);  //    base64,      a  href
      reader.onload = function (e) {
        //     ,    a      
        var a = document.createElement('a');
        a.download = 'data.xlsx';
        a.href = e.target.result;
        $("body").append(a);  //   firefox     click
        a.click();
        $(a).remove();
      }
    }
  };
  //   ajax  
  xhr.send()

3.2コード:
            var xhr = new XMLHttpRequest();
            xhr.open('POST', CONTACT_ACTION_FILES_DOWNLOAD, true);
            xhr.setRequestHeader("Accept", "application/json;q=0.5");
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.responseType = "blob";  //     blob
            //            ,           /        
            xhr.onload = function () {
                //     
                if (this.status === 200) {
                    var blob = this.response;
                    var reader = new FileReader();
                    reader.readAsDataURL(blob);  //    base64,      a  href
                    reader.onload = function () {
                        $("#imgTest").attr("src", reader.result);
                    }
                }
            };
            //   ajax  
            xhr.send("filePath=" + filePath);