如何下载使用django-filebrowser上传的文件?

时间:2012-08-07 11:48:28

标签: python django django-filebrowser

我正在尝试创建文件对象的下载。该文件是使用django-filebrowser添加的,这意味着它将转入该文件的字符串路径。我尝试过以下方法:

f = Obj.objects.get(id=obj_id)
myfile = FileObject(os.path.join(MEDIA_ROOT, f.Audio.path))
...

response = HttpResponse(myfile, content_type="audio/mpeg")
response['Content-Disposition'] = 'attachment; filename=myfile.mp3'

return response

下载的文件包含文件位置的路径字符串,而不是文件。任何人都可以帮助您访问文件对象吗?

2 个答案:

答案 0 :(得分:1)

f = Obj.objects.get(id=obj_id)
myfile = open(os.path.join(MEDIA_ROOT, f.Audio.path)).read()
...

response = HttpResponse(myfile, content_type="audio/mpeg")
response['Content-Disposition'] = 'attachment; filename=myfile.mp3'

return response

请注意!这不是内存友好的!由于整个文件被放入内存。您最好使用网络服务器进行文件服务,或者如果您想使用Django进行文件服务,可以使用xsendfile或查看此thread

答案 1 :(得分:0)

您需要打开文件并将其二进制内容发送回响应中。如下所示:

fileObject = FileObject(os.path.join(MEDIA_ROOT, f.Audio.path))
myfile = open(fileObject.path)
response = HttpResponse(myfile.read(), mimetype="audio/mpeg")
response['Content-Disposition'] = 'attachment; filename=myfile.mp3'
return response

希望得到你想要的东西。