私は現在、Flaskで書かれたアプリケーションを維持するように割り当てられています。現在、ユーザーが事前生成のExcelファイルをダウンロードできるようにする機能を追加しようとしていますが、送信しようとするたびに、ブラウザはUTF-8でファイルを再エンコードしてマルチバイト文字を追加しますこれはファイルを破壊します。ChromeがUTF-8に変換してバイナリファイルを破損する
のwgetでダウンロードしたファイル:
(venv) [email protected]:~$ hexdump -C wget.xlsx | head -n 2
00000000 50 4b 03 04 14 00 00 00 08 00 06 06 fb 4a 1f 23 |PK...........J.#|
00000010 cf 03 c0 00 00 00 13 02 00 00 0b 00 00 00 5f 72 |.............._r|
Chromeでダウンロードしたファイル(?EF BF BD
シーケンスに気づく)
(venv) [email protected]:~$ hexdump -C chrome.xlsx | head -n 2
00000000 50 4b 03 04 14 00 00 00 08 00 ef bf bd 03 ef bf |PK..............|
00000010 bd 4a 1f 23 ef bf bd 03 ef bf bd 00 00 00 13 02 |.J.#............|
誰もが、私はこの問題を解決できる方法を知っていますか?これは私が使用しているコードです:
data = b'PK\x03\x04\x14\x00\x00\x00\x08\x00}\x0c\xfbJ\x1f#\xcf\x03\xc0\x00\x00\x00\x13\x02\x00\x00\x0b\x00\x00\x00'
send_file(BytesIO(data), attachment_filename="x.xlsx", as_attachment=True)
関連問題:Encoding problems trying to send a binary file using flask_restful
ファイルをダウンロードするために使用されたコードはファイルを文字列として解釈し、UTF-8に変換し、 'responseType'を設定することで修正されましたAngularJS '$ http'の' 'arraybuffer''を呼び出すと、助けてくれてありがとう – Paradoxis