Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Никак не получается динамический download файлов. [RSS Feed]

#1 Март 22, 2011 15:42:24

Andrejus
От:
Зарегистрирован: 2011-03-22
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Есть вью:

def serve_file(request):
f = file(settings.MEDIA_ROOT + 'task/test.docx')
data = FileWrapper(f)
response = HttpResponse(data, mimetype="application/msword; charset=windows-1251")
response['Content-Disposition'] = 'attachment; filename=uuu.docx'
return response
Кодировка в программном модуле - UTF-8.
Файл - документ из одной строчки на английском (для простоты).
В результате браузер предлагает открыть (как Word) или сохранить. При открытии ругается , “не удаётся открыть файл … из-за ошибок содержимого”. Путь в порядке, проверял.
Запутался в трёх соснах.



Офлайн

#2 Март 23, 2011 09:59:14

Doberman26rus
От: Ставрополь
Зарегистрирован: 2009-03-16
Сообщения: 128
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Попробуй так:

f = file(settings.MEDIA_ROOT + 'task/test.docx', 'r+')
response = HttpResponse(data, content_type="application/msword")



подпись

Отредактировано (Март 23, 2011 09:59:53)

Офлайн

#3 Март 23, 2011 12:51:35

Andrejus
От:
Зарегистрирован: 2011-03-22
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Doberman26rus
Попробуй так:
f = file(settings.MEDIA_ROOT + 'task/test.docx', 'r+')
response = HttpResponse(data, content_type="application/msword")
Увы, не помогло - всё равно приходит та же ошибка.

Дам доп инфу: Винда 7 x64, питон 2.7.1 и джанга 1.2.5 - 32 бита, Word 2007 32 бита…



Офлайн

#4 Март 23, 2011 13:03:20

Doberman26rus
От: Ставрополь
Зарегистрирован: 2009-03-16
Сообщения: 128
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

упс. Простите не заметил =)
не

f = file(settings.MEDIA_ROOT + 'task/test.docx', 'r+')
а
f = open(settings.MEDIA_ROOT + 'task/test.docx', 'r+')



подпись

Офлайн

#5 Март 23, 2011 13:40:03

Andrejus
От:
Зарегистрирован: 2011-03-22
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Doberman26rus
упс. Простите не заметил =)
не
f = file(settings.MEDIA_ROOT + 'task/test.docx', 'r+')
а
f = open(settings.MEDIA_ROOT + 'task/test.docx', 'r+')
Вылезла та же ошибка. Погуглив выяснил, что, похоже, для DOCX-файлов существует новый мим-тип “application/vnd.openxmlformats-officedocument.wordprocessingml.document”, который вроде как надо регистрировать на серваках, но это другая тема.

Решил попробовать скормить файл word, сохранённый в формате 97-2003 - получилось так:
def serve_file(request):
f = open(settings.MEDIA_ROOT + 'task/test.doc', 'r+')
data = FileWrapper(f)
response = HttpResponse(data, content_type="application/msword")
response['Content-Disposition'] = 'attachment; filename=uuu.doc'
return response
Перезапустил на всякий случай джанго-сервер, пошёл по ссылке, и получил в ворде диалог выбора кодировки. При этом ворд предложил мне кодировку “Вьетнамская(Windows)”, выбор иных кодировок не дал результатов, открылся документ из символов псевдографики - вместо одной строки исходного текста получил много строк непонятных значков :).



Офлайн

#6 Март 23, 2011 13:52:51

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Может быть файл всё-таки в бинарном режиме открыть?



Офлайн

#7 Март 23, 2011 14:37:28

Andrejus
От:
Зарегистрирован: 2011-03-22
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Никак не получается динамический download файлов.

Гениально!
Добавление ‘b’ к режиму открытия решило все вышеописанные проблемы.
Спасибо всем, особенно Александру.

ЗЫ: однако для .docx лучше использовать mime-type “application/vnd.openxmlformats-officedocument.wordprocessingml.document”, иначе к имени файла будет присовокуплён хвост с расширением .DOC.



Офлайн

  • Начало
  • » Django
  • » Никак не получается динамический download файлов.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version