HTMLページからPythonピクルスファイルを提供する方法

フラビエン・ランバート

を介してFlaskアプリからPythonピクルスファイルをダウンロードできるようにしようとしています

import pickle
from flask import Flask, render_template_string


app = Flask(__name__)

template = """
<button onclick="download_file()" data-trigger-update-context="false">Download</button>
<script>
    function download_file() {
        mime_type = '{{ mime_type }}';
        var blob = new Blob(['{{ file_content }}'], { type: mime_type });
        var dlink = document.createElement('a');
        dlink.download = 'pickle.pkl';
        dlink.href = window.URL.createObjectURL(blob);
        dlink.onclick = function (e) {
            // revokeObjectURL needs a delay to work properly.
            var that = this;
            setTimeout(function () {
                window.URL.revokeObjectURL(that.href);
            }, 1500);
        };
        document.body.appendChild(dlink);
        dlink.click();
        dlink.remove();
    }
</script>
"""


@app.route("/")
def download():
    return render_template_string(
        template,
        file_content=pickle.dumps("text"),
        mime_type="application/octet-stream",
    )

ファイルのダウンロードは正常に機能しますが、ダウンロード中に次のエラーが発生するため、ダウンロードしたファイル自体が破損しているようです。

Python 3.7.6 | packaged by conda-forge | (default, Mar 23 2020, 23:03:20) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import pickle                                                                                                                                                                                              

In [2]: with open("pickle.pkl", "rb") as f: 
   ...:     pickle.load(f) 
   ...:                                                                                                                                                                                                            
---------------------------------------------------------------------------
UnpicklingError                           Traceback (most recent call last)
<ipython-input-2-b5282f4164d8> in <module>
      1 with open("pickle.pkl", "rb") as f:
----> 2     pickle.load(f)
      3 

UnpicklingError: unpickling stack underflow

ダウンロードスクリプトの問題に関するヒントはありますか?

ご協力いただきありがとうございます。

アンワルビッチ

基本的に、変更する必要があるのは2つだけです。

  • このdownload()メソッドでは、シリアル化されたバイトを整数のリストに変換する必要があります。
  • 次に、この番号のリストを読み取るためにJavaScriptコードを変更する必要があります。

したがって、コードは次のようになります。

import pickle
from flask import Flask, render_template_string


app = Flask(__name__)

template = """
<button onclick="download_file()" data-trigger-update-context="false">Download</button>
<script>
    function download_file() {
        let bytes_array = new Uint8Array({{file_content}}); //<--- add this
        mime_type = '{{ mime_type }}';
        var blob = new Blob([bytes_array], { type: mime_type }); //<-- change this
        var dlink = document.createElement('a');
        dlink.download = 'pickle.pkl';
        dlink.href = window.URL.createObjectURL(blob);
        dlink.onclick = function (e) {
            // revokeObjectURL needs a delay to work properly.
            var that = this;
            setTimeout(function () {
                window.URL.revokeObjectURL(that.href);
            }, 1500);
        };
        document.body.appendChild(dlink);
        dlink.click();
        dlink.remove();
    }
</script>
"""


@app.route("/")
def download():
    return render_template_string(
        template,
        file_content=list(pickle.dumps("text")),  # change this
        mime_type="application/octet-stream",
    )


if __name__ == '__main__':
    app.run(debug = True)

これで、次のpickle.load()ようにピクルスファイルを読み取ることができます

import pickle

with open("pickle.pkl", 'rb') as fin:
    print(pickle.load(fin))
# prints: text

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Expressルートからスクリプトファイルを提供する方法

分類Dev

Webページテーブルから.csvファイルにデータをコピーする方法は?

分類Dev

Pythonを使用してPDFファイルからページを削除する方法

分類Dev

WebページからTypeScriptファイルを参照する方法

分類Dev

PDFファイルからページ番号を抽出する方法

分類Dev

HTMLノードを生成するJavaScriptファイルを返すajaxページのスクレイピング

分類Dev

テキストファイルからHTMLページを自動生成する方法は?

分類Dev

Pythonを使用して、複数の動的選択フィールドを持つページからデータをスクレイピングする方法は?

分類Dev

Python:電子メールのリンクからWebページを(htmlファイルとして)保存する方法

分類Dev

ファイルから特定のスペースをコピーする

分類Dev

WindowsでXAMPPApacheサーバーからHTMLファイルを提供する方法

分類Dev

Jenkinsのデスクトップからジョブワークスペースにファイルをコピーするプラグイン

分類Dev

Pythonを使用してテキストファイルからダイナミックHTMLページを作成する

分類Dev

Webからローカルの.swfファイルにアクセスする(htmlページ)

分類Dev

フラスコ内で一度htmlページにファイルを提供するための最良の方法(python)

分類Dev

ローカルファイルパスからファイルオブジェクトを作成する方法[JavaScript]

分類Dev

Dockerイメージからファイルをコピーする方法-dockerfilecmd

分類Dev

HTMLからPDFファイルをスクレイピングするWeb

分類Dev

Pythonでファイルフォルダーの外部からモジュールにアクセスする方法

分類Dev

protobufからPythonクラスファイルを生成する方法

分類Dev

HDFSからローカルファイルシステムにファイルをコピーする方法

分類Dev

Jenkinワークスペースから(Dockerコンテナー内から)ローカルドライブにファイルをコピーする

分類Dev

Jenkinワークスペースから(Dockerコンテナー内から)ローカルドライブにファイルをコピーする

分類Dev

Python-URLからPDFファイルをスクレイピングする

分類Dev

WebページPythonから複数のテーブルをスクレイピングする

分類Dev

Androidファイルマネージャーから直接HTMLページを開くときに背景画像の絶対パスを正しく設定する方法

分類Dev

ジェンキンスver。2.121.3-ワークスペースからファイルを削除する

分類Dev

HTMLページからjarファイルまたはJavaメソッドを実行する方法は?

分類Dev

テストドライブからファイルをコピーする方法

Related 関連記事

  1. 1

    Expressルートからスクリプトファイルを提供する方法

  2. 2

    Webページテーブルから.csvファイルにデータをコピーする方法は?

  3. 3

    Pythonを使用してPDFファイルからページを削除する方法

  4. 4

    WebページからTypeScriptファイルを参照する方法

  5. 5

    PDFファイルからページ番号を抽出する方法

  6. 6

    HTMLノードを生成するJavaScriptファイルを返すajaxページのスクレイピング

  7. 7

    テキストファイルからHTMLページを自動生成する方法は?

  8. 8

    Pythonを使用して、複数の動的選択フィールドを持つページからデータをスクレイピングする方法は?

  9. 9

    Python:電子メールのリンクからWebページを(htmlファイルとして)保存する方法

  10. 10

    ファイルから特定のスペースをコピーする

  11. 11

    WindowsでXAMPPApacheサーバーからHTMLファイルを提供する方法

  12. 12

    Jenkinsのデスクトップからジョブワークスペースにファイルをコピーするプラグイン

  13. 13

    Pythonを使用してテキストファイルからダイナミックHTMLページを作成する

  14. 14

    Webからローカルの.swfファイルにアクセスする(htmlページ)

  15. 15

    フラスコ内で一度htmlページにファイルを提供するための最良の方法(python)

  16. 16

    ローカルファイルパスからファイルオブジェクトを作成する方法[JavaScript]

  17. 17

    Dockerイメージからファイルをコピーする方法-dockerfilecmd

  18. 18

    HTMLからPDFファイルをスクレイピングするWeb

  19. 19

    Pythonでファイルフォルダーの外部からモジュールにアクセスする方法

  20. 20

    protobufからPythonクラスファイルを生成する方法

  21. 21

    HDFSからローカルファイルシステムにファイルをコピーする方法

  22. 22

    Jenkinワークスペースから(Dockerコンテナー内から)ローカルドライブにファイルをコピーする

  23. 23

    Jenkinワークスペースから(Dockerコンテナー内から)ローカルドライブにファイルをコピーする

  24. 24

    Python-URLからPDFファイルをスクレイピングする

  25. 25

    WebページPythonから複数のテーブルをスクレイピングする

  26. 26

    Androidファイルマネージャーから直接HTMLページを開くときに背景画像の絶対パスを正しく設定する方法

  27. 27

    ジェンキンスver。2.121.3-ワークスペースからファイルを削除する

  28. 28

    HTMLページからjarファイルまたはJavaメソッドを実行する方法は?

  29. 29

    テストドライブからファイルをコピーする方法

ホットタグ

アーカイブ