ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptでダウンロード機能を実装する方法

JavaScriptでダウンロード機能を実装する方法

藏色散人
藏色散人オリジナル
2023-02-10 09:18:193692ブラウズ

JavaScript でダウンロード機能を実装する方法: 1. a タグを通じてダウンロード; 2. "window.open" メソッドを通じてダウンロード; 3. "location.href" メソッドを通じてダウンロード; 4. を通じてファイル転送 BLOB オブジェクトはダウンロード機能を実装します。

JavaScriptでダウンロード機能を実装する方法

このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript でダウンロード機能を実装するにはどうすればよいですか?

#js はファイルダウンロード機能を実装します

1.タグのダウンロード

<body>
<button onClick="download()">a标签下载</button>
<script>
function download(url = &#39;http:www.xxx.com/download?name=file.pdf&#39;, fileName = &#39;未知文件&#39;) {
      const a = document.createElement(&#39;a&#39;);
      a.style.display = &#39;none&#39;;
      a.setAttribute(&#39;target&#39;, &#39;_blank&#39;);
      /*
       * download的属性是HTML5新增的属性
       * href属性的地址必须是非跨域的地址,如果引用的是第三方的网站或者说是前后端分离的项目(调用后台的接口),这时download就会不起作用。
       * 此时,如果是下载浏览器无法解析的文件,例如.exe,.xlsx..那么浏览器会自动下载,但是如果使用浏览器可以解析的文件,比如.txt,.png,.pdf....浏览器就会采取预览模式
       * 所以,对于.txt,.png,.pdf等的预览功能我们就可以直接不设置download属性(前提是后端响应头的Content-Type: application/octet-stream,如果为application/pdf浏览器则会判断文件为 pdf ,自动执行预览的策略)
       */
      fileName && a.setAttribute(&#39;download&#39;, fileName);
      a.href = url;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
    }
</script>
</body>

利点:

  • txt、png、pdf、exe、xlsx およびその他の種類のファイルを直接ダウンロードできます

欠点:

  • タグで実行できるのは、 get request を実行するため、URL には長さ制限があります

  • ダウンロードの進行状況を取得できません

  • クロスドメイン制限

  • 認証操作のヘッダーにトークンを含めることができません

  • インターフェイスが成功したかどうかを判断できません

  • IE の互換性問題点

2. ダウンロードウィンドウ.open

<body>
  <button onclick="download(&#39;http://www.xxx.com/download?name=file.pdf&#39;)">window.open下载</button>
  <script>
    function download(url) {
      window.open(url, &#39;_self&#39;);
      /**
       *  _blank:在新窗口显示目标网页
       *  _self:在当前窗口显示目标网页
       *  _top:框架网页中在上部窗口中显示目标网页
      /**
    }
  </script>
</body>

利点:

  • シンプルで便利

欠点:

  • URL の長さ制限の問題が発生します

  • ##URL エンコードの問題に注意する必要があります
  • ダウンロードの進行状況を取得できません
  • 認証操作のヘッダーにトークンを含めることができません
  • インターフェイスが成功したかどうかを判断できません
  • #ブラウザで直接プレビューできるファイル タイプを直接ダウンロードできません (txt、png、pdf が直接プレビューされます)
  • 3. ダウンロード場所.href
  • <body>
      <button onclick="download(&#39;http://www.xxx.com/download?name=file.pdf&#39;)">location.href下载
      </button>
      <script>
        function download(url) {
          window.location.href = url;
        }
      </script>
    </body>
利点

シンプル、便利、直接的
  • 大きなファイル(G 以上)をダウンロードできる
  • #欠点

#URL の長さ制限の問題が発生する

    #URL エンコードの問題に注意する必要があります
  • ダウンロードの進行状況を取得できません
  • ヘッダーにトークンを含めることができません認証操作
  • ##ブラウザで直接プレビューできるファイル タイプは直接ダウンロードできません (txt、png、pdf は直接プレビューされます)
  • インターフェイスが正常に返されたかどうかを判断できません
  • #3. ファイル転送 BLOB オブジェクトのダウンロード

     <button onclick="download()">文件流转blob对象下载</button>
     <script>
     download() {
     axios({
     url: &#39;http://www.xxx.com/download&#39;,
     method: &#39;get&#39;,
     responseType: &#39;blob&#39;,
     }).then(res => {
     const fileName = res.headers.content-disposition.split(&#39;;&#39;)[1].split(&#39;filename=&#39;)[1];
     const filestream = res.data;  // 返回的文件流
     // {type: &#39;application/vnd.ms-excel&#39;}指定对应文件类型为.XLS (.XLS的缩写就为application/vnd.ms-excel)
     const blob = new Blob([filestream], {type: &#39;application/vnd.ms-excel&#39;});
     const a = document.createElement(&#39;a&#39;);
     const href = window.URL.createObjectURL(blob); // 创建下载连接
        a.href = href;
        a.download = decodeURL(fileName );
        document.body.appendChild(a);
            a.click();
            document.body.removeChild(a); // 下载完移除元素
            window.URL.revokeObjectURL(href); // 释放掉blob对象
     })
     }
     </script>
  • 利点:
  • 次のことができます。 txt、png、pdf およびその他のタイプのファイルをダウンロード

#認証操作のためにヘッダーにトークンを含めることができます

    #ファイルを取得できますダウンロードの進行状況
  • インターフェイスが正常に返されたかどうかを判断できます
  • 欠点:
  • 互換性の問題、IE10 以下では利用できません。Safari ブラウザに注意してください。公式 Web サイトには、Safari には application/octet-stream タイプの BLOB に重大な問題があると記載されています。
  • バックエンドを返します。すべてのファイル ストリームが取得された後にのみダウンロードされます

    推奨学習: 「
  • JavaScript ビデオ チュートリアル

以上がJavaScriptでダウンロード機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。