4

我正在尝试创建文件对象的下载。该文件是使用 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

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

4

2 回答 2

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或查看此线程

于 2012-08-07T11:57:12.950 回答
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

希望能得到你正在寻找的东西。

于 2012-08-07T11:56:10.083 回答