ジャンゴを使用してのpython3のダウンロードファイルには、中国の名前はどのように行う文字化け?

いくつかの時間前、私はブログを更新した年ビットのフロントエンド小さなかわいい軽蔑しなかった、私は明らかにそれまでに年に2ヶ月があり、受け入れることを拒否しました。しかし、それは言われている、またはの外観を更新します。
これらは、次のテキストを開始するための言い訳です。
 
 
私が行っジャンゴと社内システムを、持っている、プロジェクトは必然的に総urls.pyプロジェクトで、私はいつも自分の道をDjangoの使用、怠惰前に、ファイルをダウンロードするために配置されます
 
urlpatterns + =静的(FILEPATH、DOCUMENT_ROOT = FILEPATH)

 

このようなソリューションを提供しています。
 
しかし、この方法では、偉大な欠陥があります書かれたテスト環境を再生することができますが、デバッグ中に正式な環境設定を確認してください= Trueがオフに。そして、この方法は、後のデバッグをオフにし、使用することはできません。
 
設定しヘッダ:だから私は、伝統的なルートを行かなければなりませんでした。
 
urls.pyの増加:
 
URL(R " ^ダウンロード/ $ "、views.download、名前= " ダウンロード"

 

ページで:
 
< HREF = "{%のURL 'ダウンロード' %}" >下载</ A >

 

views.pyを向上させる機能を考慮すると:
 
DEF :(要求)をダウンロード
     戻り build_download_response(FILE_PATH、" 私はコーラの.docxの愛を"

 

(MTV Yaojin 3つのトリックモード、何も間違っています)
 
システムは、ダウンロード機能の内部で複数の場所を使用していますので、私は一般的な機能にそれを置く理由は次のとおりです。
 
django.http インポートFileResponseの
 
デフbuild_download_response(ファイルパス、ファイル名):
     "" " 
    构建下载文件的文件头
    :PARAMファイルパス:文件路径
    :PARAMファイル名:文件名
    :リターン:FileResponse 
    """ 
    absname = os.path.join(ファイルパス、ファイル名)であれば os.path.isdir(ファイルパス)他のファイルパスの
 
    応答 = FileResponse(オープン(absname、" RB " ))
    応答[ " のContent-Type " ] = " アプリケーション/ octet-streamの" 
    応答[ "コンテンツ-処分 ] = 添付ファイル。ファイル名=「%s」は"ファイル名の
     戻り応答
 

 

オンラインの文を参照すると、これは問題ありません。ブルーグースは、それは本当に問題です:私は、ダウンロードボタンをポップアップインターフェースのみ「ダウンロード」の単語をクリックします。
 
 
ニャーニャーニャー?私はそれをファイル?
私は問題はありません、ビューの大きさの観点から見下ろしたファイルをダウンロードしてみてください。
 
 
言い換えれば、 -私は物事をスローしない、あなたが正常に開くことができ、一晩の名前の変更を置く だけで、ファイル名を問題外
しかし、ファイル名は、ああ、髪の問題を持つことができますか?あなたは今誰が唯一の中国の会社に私をいじめることはできません!
 
 
 
Baiduの検索に激しいとエキサイティングした後、私はこのブログから学んだ  https://blog.csdn.net/u011090495/article/details/18815777  理由で分かりました。
単純なポイント、 この事内部のContent-処分のファイル名は、彼らがいないRFC標準である場合にのみ、ASCIIでエンコードされたファイル名をサポートしています。ファイル名が英語ではない場合、私はそれが文字化け名前が付けられます怖い、または状況が名前を変更することが表示されます それでは、どのようにそれを行うには?拡張子を追加する別のRFCは、ファイル名の*を定義し、それをコードするファイル名をすることができます。
だから、私はここからコンテンツディスポジションを置きます
 
応答[ " コンテンツの廃棄" ] = " アタッチメント;ファイル名= '%S' "%ファイル名

 

変更
 
応答[ " コンテンツの廃棄" ] = " アタッチメント;ファイル名= '%s'は、ファイル名* = UTF-8 '' %1 "%(filename.encode(" UTF-8 ")、filename.encode(" UTF- 8 "))

 

テストの結果は、泣いて。
 
 
本当にそれがコード化されている......
私はトラブルをしたいです。
 
幸いなことに、後で  https://segmentfault.com/q/1010000009078463  私はこの投稿への答えを見つけました。オリジナルのファイル名* = UTF-8 ' %s "の%のfilename.encode(" UTF-8「)は、書き込みに関係なく使用されているジャンゴ・ジャンゴの独自の方法:
 
django.httpの輸入FileResponse
 から django.utils.encoding 輸入escape_uri_path 
 
デフbuild_download_response(ファイルパス、ファイル名):
     "" " 
    构建下载文件的文件头
    :PARAMファイルパス:文件路径
    :PARAMファイル名:文件名
    :リターン:FileResponse 
    """ 
    absname = os.path.join(ファイルパス、ファイル名)であれば os.path.isdir(ファイルパス)他のファイルパスの
 
    応答 = FileResponse(オープン(absname、" RB " ))
    応答[ " のContent-Type " ] = "アプリケーション/ octet-streamの" 
    レスポンス[ " コンテンツの廃棄" ] = " アタッチメント。ファイル名* = UTF-8 '' {} .format(escape_uri_path(ファイル名)) 
 
    戻り応答
 

 

だから、あなたは正常にダウンロードすることができます。
 
 
 
OPEN LOOK、コンテンツ問題なし!
 
 
 
ハッピー!(私も披露する前に問題になりません!)
 

おすすめ

転載: www.cnblogs.com/anpengapple/p/11431266.html