Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2010 14:59:49

LudchikLuk
От:
Зарегистрирован: 2010-11-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть в HttpResponse файл

Мне нужно, чтобы при нажатии на ссылки, пользователь мог загрузить файл.
Когда я писала функцию для загрузки файла, то неважно было в какой он кодировке, он с помощью этого кода записывался таким, какой есть и нормально отображалось содержимое:

f = open("%s/doc_files/doc%s/%s" % (settings.MEDIA_ROOT, idDoc, hash + request.FILES[i].name), "wb")
for chunk in request.FILES[i].chunks():
f.write(chunk)
f.close()
В документации написано:
Telling the browser to treat the response as a file attachment
To tell the browser to treat the response as a file attachment, use the mimetype argument and set the Content-Disposition header. For example, this is how you might return a Microsoft Excel spreadsheet:
>>> response = HttpResponse(my_data, mimetype='application/vnd.ms-excel')
>>> response = ‘attachment; filename=foo.xls’

Тоесть я так поняла, что нада считать файл, а потом вернуть. Но если файл в другой кодировке (не в utf8), то возвращаеться файл с абракадаброй.
from django.core.files import File
f = open("%s/doc_files/doc%d/%s" % (settings.MEDIA_ROOT, d.nomer, d.value), "r")
myfile = File(f)
a = myfile.read()
myfile.close()
response = HttpResponse(a, mimetype='application/vnd.ms-word')
response['Content-Disposition'] = 'attachment; filename=1.doc'
return response
Подскажите, как мне сделать.

И еще вопрос, нужно, чтобы в другой функции, если это файл html или txt, считать и вернуть ответ. Я не знаю как мне определить тип, чтобы знать, считывать файл или нет.



Отредактировано (Ноя. 26, 2010 15:03:53)

Офлайн

#2 Ноя. 26, 2010 18:34:29

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Вернуть в HttpResponse файл

LudchikLuk
Тоесть я так поняла, что нада считать файл, а потом вернуть.
а почему не сделать просто ссылку на файл?



Офлайн

#3 Ноя. 27, 2010 03:36:41

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть в HttpResponse файл

действительно зачем возвращать файл?
формируйте на сервере нужный вам url
возвращайте html или JSON, а потом если нужно его сразу отобразить на клиенте вызывайте скрипт:
document.location.href = url



Офлайн

#4 Ноя. 27, 2010 15:31:47

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть в HttpResponse файл

Сейчас не проверю, но по памяти вроде можно возвращать HttpResponse(filelike_object), т.е.:

f = open('filename', 'rb')
return HttpResponse(f)



Офлайн

#5 Дек. 1, 2010 05:55:47

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть в HttpResponse файл

если файл большой, имеется вероятность таким образом вырулить ошибку 503 (на некоторых хостингах), но вообще я такого не встречал сильно ))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version