1

リンクに記載されている方法を使用しています https://stackoverflow.com/a/8601118/2497977

import os
import mimetypes
from django.core.servers.basehttp import FileWrapper


def download_file(request):
   the_file = '/some/file/name.png'
   filename = os.path.basename(the_file)
   response = HttpResponse(FileWrapper(open(the_file)),
                       content_type=mimetypes.guess_type(the_file)[0])
   response['Content-Length'] = os.path.getsize(the_file)    
   response['Content-Disposition'] = "attachment; filename=%s" % filename
   return response

最初にフォームでデータを取得し、送信時にデータを処理して「構成」を生成し、ファイルに書き出します。有効な場合は、ファイルをダウンロードとしてユーザーに返します。私の状況ではファイルがテキストであるという問題に遭遇していることを除いて、それはうまく機能します。そのため、ファイルがダウンロードされると、CR/LF のないテキストの塊として送信されます。

これに対処する方法について何か提案はありますか?

4

1 に答える 1

2

バイナリモードで開きます。

open(the_file, 'rb')

http://docs.python.org/2/library/functions.html#open

デフォルトではテキスト モードが使用されます。このモードでは、'\n' 文字が書き込み時にプラットフォーム固有の表現に変換され、読み取り時に元に戻されます。したがって、バイナリ ファイルを開くときは、モード値に「b」を追加してファイルをバイナリ モードで開く必要があります。これにより、移植性が向上します。(追加の 'b' は、バイナリ ファイルとテキスト ファイルを異なる方法で処理しないシステムでも、それがドキュメントとして機能する場合に役立ちます。)

于 2013-06-22T04:18:41.353 に答える