Para algumas situações é melhor que o visitante faça download do arquivo, mesmo que o browser possua os plugins necessários para exibí-lo. Para forçar o download basta utilizar a view abaixo:
def download_view(request):
from django.http import HttpResponse, Http404
from os import path
import mimetypes
arquivo = "%s/%s" % (settings.MEDIA_ROOT, request.GET.get('filename'), )
if not (path.exists(arquivo)):
raise Http404()
mimetype, encoding = mimetypes.guess_type(arquivo)
if mimetype is None:
mimetype = 'application/force-download'
file = arquivo.split("/")[-1]
response = HttpResponse(open(arquivo, 'r').read())
response['Content-Type'] = mimetype
response['Pragma'] = 'public'
response['Expires'] = '0'
response['Cache-Control'] = 'must-revalidate, post-check=0, pre-check=0'
response['Content-Disposition'] = 'attachment; filename=%s' % file
response['Content-Transfer-Encoding'] = 'binary'
response['Content-Length'] = str(path.getsize(arquivo))
return response
O parâmetro filename vem por get, permitindo que a mesma view seja utilizada para vários downloads de diferentes classes. O que pode ser ajustado é o caminho da definição da variável filename de acordo com a necessidade.
hasta!
Nenhum comentário:
Postar um comentário