我在Django中使用以下视图来创建一个文件并让浏览器下载它
def aux_pizarra(request):
myfile = StringIO.StringIO()
myfile.write("hello")
response = HttpResponse(FileWrapper(myfile), content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=prueba.txt'
return response
但下载的文件始终为空白.
有任何想法吗?
谢谢
最佳答案 您必须将指针移动到缓冲区的开头并使用seek并使用flush以防万一写入未执行.
from django.core.servers.basehttp import FileWrapper
import StringIO
def aux_pizarra(request):
myfile = StringIO.StringIO()
myfile.write("hello")
myfile.flush()
myfile.seek(0) # move the pointer to the beginning of the buffer
response = HttpResponse(FileWrapper(myfile), content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=prueba.txt'
return response
这是在控制台中执行此操作时发生的情况:
>>> import StringIO
>>> s = StringIO.StringIO()
>>> s.write('hello')
>>> s.readlines()
[]
>>> s.seek(0)
>>> s.readlines()
['hello']
在那里你可以看到如何将缓冲区指针指向开头以进行读取.
希望这可以帮助!