Представление Django, которое должно возвращать вложение файла, отображается в браузере - PullRequest
0 голосов
/ 08 августа 2011

Я чувствую себя немного как nubcake, потому что я уверен, что упускаю что-то довольно простое.

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

Такое ощущение, что проблема должна быть с mimetype, но я совершенно уверен, что установил это правильно.При этом я впервые явно настраиваю mimetypes, поэтому я легко могу ошибаться.

В другом сообщении в блоге, которое я прочитал, указано, что, возможно, это была проблема с сервером dev-live, но я перенес это на apacheсервер не помог.

Anyhoo, код выглядит так (большая часть моего кода, на мой взгляд, скопирована из примеров, которые я нашел):

def get_file(clss, request, obj):                                                                                                  
   path = obj.file.path                                                                                   
   fsock = open(path,"r")                                                                                                         
   content_type, encoding = mimetypes.guess_type( path )                                                                          

   response = HttpResponse(fsock, content_type = content_type)                                                                    
   response['Content-Length'] = os.path.getsize( path )                                                  
   response['Content-Encoding'] = encoding                                                                                        
   response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(os.path.basename( path ) ) 

   return response                                                                                                                

1 Ответ

0 голосов
/ 15 августа 2011

Для этого я использую Content-type "application / x-download".Content-type сообщает браузеру, как визуализировать ответ, и вы хотите, чтобы браузер «рендерил» путем сохранения битов, а не пытался отображать их способом, соответствующим тому, что находится в файле.

...