Я хочу вернуть несколько файлов в HttpResponse и использую следующую функцию. Размер возвращаемого файла всегда равен 1 КБ, и я не знаю почему. Я могу открыть файл, но мне кажется, что он обслуживается некорректно. Поэтому я хотел знать, как можно возвращать файлы с помощью django / python через HttpResponse.
@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
Изменить: ошибка на самом деле не ошибка ;-)
Это решение работает на сервере Apache, поэтому источник в порядке.
При написании этого вопроса я тестировал его локально с сервером разработки django и задавался вопросом, почему он не работает. Мой друг сказал мне, что эта проблема может возникнуть, если на сервере не установлены типы пантомимы. Но он не был уверен, что это проблема. Но одно можно сказать наверняка .. это как-то связано с сервером.
mimetypeвHttpResponseбыл заменен на полеcontent_type. - person Hanan N.   schedule 28.10.2014