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 回答