Ich möchte einige Dateien in einer HttpResponse zurückgeben und ich verwende die folgende Funktion. Die Datei, die zurückgegeben wird, hat immer eine Dateigröße von 1 KB und ich weiß nicht warum. Ich kann die Datei öffnen, aber es scheint, dass sie nicht korrekt bedient wird. Also wollte ich wissen, wie man Dateien mit django/python über eine HttpResponse zurückgeben kann.django Rückgabedatei über HttpResponse - Datei wird nicht korrekt bedient
@login_required
def serve_upload_files(request, file_url):
import os.path
import mimetypes
mimetypes.init()
try:
file_path = settings.UPLOAD_LOCATION + '/' + file_url
fsock = open(file_path,"r")
#file = fsock.read()
#fsock = open(file_path,"r").read()
file_name = os.path.basename(file_path)
file_size = os.path.getsize(file_path)
print "file size is: " + str(file_size)
mime_type_guess = mimetypes.guess_type(file_name)
if mime_type_guess is not None:
response = HttpResponse(fsock, mimetype=mime_type_guess[0])
response['Content-Disposition'] = 'attachment; filename=' + file_name
except IOError:
response = HttpResponseNotFound()
return response
Edit: Der Fehler ist eigentlich kein Fehler ;-)
Diese Lösung wird in der Produktion auf einem Apache-Server arbeiten, so ist die Quelle ok.
Beim Schreiben dieser Frage habe ich es lokal mit dem Django-Entwicklungsserver getestet und habe mich gefragt, warum es nicht funktioniert. Ein Freund von mir sagte mir, dass dieses Problem auftreten könnte, wenn die MIME-Typen nicht im Server eingestellt sind. Aber er war sich nicht sicher, ob das das Problem ist. Aber eins ist sicher .. es hat etwas mit dem Server zu tun.
Für diejenigen, die versuchen, diesen Code zu verwenden, bedenken Sie, dass das Argument 'mimetype' in der' HttpResponse' durch das Feld 'content_type' ersetzt wurde. –