2017-09-07 3 views
0

Ceci est mon views.py fichiers:Erreur d'envoi d'un fichier en utilisant Django - fichier se révèle vide

from django.http import HttpResponse 

def render(request): 
    response = HttpResponse(content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' 
    response['X-Sendfile'] = '/files/filename.pdf' 
    # path relative to views.py 
    return response 

Quand je lance le serveur et demande

http://localhost:8080/somestring 

je reçois un fichier vide appelé somefilename.pdf. Je soupçonne qu'il y a une partie cruciale manquante dans render.

Les autres parties de cette application en dehors de views.py sont correctes à ma compréhension.

+1

Utilisez-vous 'manage.py runserver'? Il ne supporte pas 'X-Sendfile'. En production, vous devez activer X-Sendfile pour votre serveur (par exemple Apache). – Alasdair

+0

@Alasdair, oui J'utilise 'python manage.py runserver' pour démarrer le serveur. – Clone

Répondre

0

Voici le code qui a résolu mon problème:

from django.http import HttpResponse 
from wsgiref.util import FileWrapper 

def render(request): 
    response = HttpResponse(FileWrapper(open('file.pdf', 'rb')), content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' 

    return response 
0

Le sereur de développement manage.py runserver ne prend pas en charge X-Sendfile. En production, vous devez activer X-Sendfile pour votre serveur (par exemple Apache).

Vous pouvez trouver le package django-sendfile utile. Il a un backend que vous pouvez utiliser en développement. Cependant, il n'a pas eu une version dans un certain temps, et j'ai trouvé que je devais appliquer pull request 62 pour obtenir le support de Python 3.