【发布时间】:2019-03-27 07:04:53
【问题描述】:
class ProductDownloadlView(MultiSlugMixin,DetailView):
model=Product
def get(self,request,*args,**kwargs):
obj=self.get_object()
filepath = os.path.join(settings.PROTECTED_ROOT,obj.media.path)
guessed_type = guess_type(filepath)[0]
wrapper=FileWrapper(open(filepath))
mimetype = 'application/force-download'
if guessed_type:
mimetype=guessed_type
response = HttpResponse(wrapper,content_type=mimetype)
if request.GET.get("preview"):
response["Content-Disposition"]="attachment; filename=%s" %(obj.media.name)
response["X-SendFile"]=str(obj.media.name)
return response
我正在使用 python 3.7 和 django 1.8.6 尝试下载 .txt 之类的文件,并且 .md 文件可以正常工作,但我尝试了一个图像文件,它给出了错误charmap'编解码器无法解码位置 250 的字节 0x81:字符映射到 来自模板列表产品
{% extends "base.html" %}
{% block Content %}
<h1>Products</h1>
<p>{{object.title}} </p>
<p>{{object.description}} </p>
<p>{{object.price}}</p>
{% if object.media %}
<p>{{ object.media }}</p>
<p><a href="{{ object.get_download }}">Download</a></p>
<p><a href="{{ object.get_download }}?preview=True">Preview</a></p>
{% endif %}
{% endblock Content %}
【问题讨论】:
标签: python django imagefield filefield