我正在尝试创建文件对象的下载。该文件是使用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
下载的文件包含文件位置的路径字符串,而不是文件。任何人都可以帮助您访问文件对象吗?
答案 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
希望得到你想要的东西。