2017-10-03 2 views
1

J'ai une vue Django qui rend une liste de fichiers téléchargés, et l'utilisateur peut cliquer sur eux pour commencer le téléchargement. Lorsque le projet a été déployé, nous avons constaté qu'il existe un fichier que les navigateurs ouvrent au lieu de le télécharger. Il semble lié à l'extension .dxf.HTML Fichier lien - force télécharger toujours

Voici comment le lien est créé:

<a href="{{ MEDIA_URL }}{{ file.url }}" target="blank">...</a> 

En conséquence:

http://localhost:8003/media/folder/whatever.dxf 

Alors, pourquoi le même navigateur se comporte différemment? Si je le lance sur localhost, alors il télécharge le fichier. Mais accéder au vrai serveur, il l'ouvrirait. Puis-je empêcher le serveur de les ouvrir dans les navigateurs?

+1

Cela dépend de la configuration du serveur. Le navigateur peut choisir d'afficher le fichier dans le navigateur, comme il le fait habituellement avec les fichiers PDF et txt. Vous devez soit définir des en-têtes pour forcer le téléchargement, soit configurer le serveur Web pour cela – OptimusCrime

Répondre

0

Vous pouvez essayer d'ajouter une nouvelle vue Django qui gérera le téléchargement.

urls.py

from django.conf.urls import url 
import views 

urlpatterns = [ 
    url(r'^download/$', views.DownloadView.as_view(), name='download') 
] 

views.py

import urllib 
from django.http import HttpResponse 
from django.views.generic.base import View 


class DownloadView(View): 
    def get(self, request): 
     location = request.GET.get('location') 
     file = urllib.urlretrieve(location) 
     contents = open(file[0], 'r') 
     content_type = '%s' % file[1].type 
     response = HttpResponse(contents, content_type=content_type) 
     response['Content-Disposition'] = 'attachment; filename="%s"' % location.split('/')[-1] 
     return response 

template.html

<a href="/download/?location={{ MEDIA_URL }}{{ file.url }}">...</a>