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'кодек не может декодировать байт 0x81 в позиции 250: символы отображаются в списке шаблонов продуктов
{% 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 %}