Quiero devolver algunos archivos en una HttpResponse y estoy usando la siguiente función. El archivo que se devuelve siempre tiene un tamaño de archivo de 1 KB y no sé por qué. Puedo abrir el archivo, pero parece que no se sirve correctamente. Por lo tanto, quería saber cómo se pueden devolver los archivos con django/python en una HttpResponse.django return file over HttpResponse - el archivo no se sirve correctamente
@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
Editar: El error no es en realidad un error ;-)
Esta solución está trabajando en la producción en un servidor Apache, por tanto, la fuente está bien.
Mientras escribía esta pregunta, la probé localmente con el servidor de desarrollo django y me preguntaba por qué no funciona. Un amigo mío me dijo que este problema podría surgir si los tipos de mime no están configurados en el servidor. Pero no estaba seguro de si este es el problema. Pero una cosa es segura ... tiene algo que ver con el servidor.
Para aquellos que intenten usar este código, tenga en cuenta que el argumento 'mimetype' en' HttpResponse' ha sido reemplazado por el campo 'content_type'. –