7C00.ME/houmu 2013-07-03

Django下载文件

参考文章地址:

直接贴代码:

def bigFileView(request):
    # do something...

    def readFile(fn, buf_size=262144):
        f = open(fn, "rb")
        while True:
            c = f.read(buf_size)
            if c:
                yield c
            else:
                break
        f.close()

    file_name = "big_file.txt"
    response = HttpResponse(readFile(file_name))

    return response

这里需要留意一下f.read(buf_size)yield c,尤其是后者找时间学习一下,在参考文章中提供了一个学习材料:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

2013-07-04 补充

上面的代码不是不完善的,文件内容会直接呈现在浏览器中,而不是通常弹出保存对话框那种,需要给HTTP响应头增加一些内容:

response = HttpResponse(readfile(file_name),
 content_type='<mine_type>')
response['Content-Disposition'] = 'attachment; filename='
 + <file_name> 
response['Content-Length'] = <file_size>

把上面三行代码替换原先的 response = HttpResponse(readFile(file_name))即可,注意mine_type,file_name,file_size需要另外初始化。