загрузить текстовый файл автоматически из django

В следующем коде, если я изменю формат вывода файла на output.csv, файл будет автоматически загружен, но если я изменю формат на output.txt, файлы отобразятся в браузере. Как автоматически загрузить файл output.txt

Поскольку файл csv загружается, в чем проблема с файлом txt для того же кода

   def downloadcsv(request):
        try:
            response = {}
            output = fq_name+"/"+ "output.txt"
            os.system(cmd)
            logger.debug(file_name)
            response.update({'status':0,'message': 'Success','file_name' : output})
        except Exception as e:
            response['message'] = "Exception while processing request"
            response['status'] = 2
            logger.exception(e)
        return HttpResponse(JsonResponse(response), content_type="application/json")

$.post("/reports/downloadcsv/", snddata,
        function callbackHandler(data, textstatus)
        {
            if (data.status == 0)
            {
                document.location.href = data.file_name;
                 //document.getElementById('my_iframe').src = data.file_name;
            }
            else if (data.status == 1 || data.status == 2)
            {
                $('#loading').hide();
                alert('Error while processing data');
            }
            $('#loading').hide();
         },
         "json"
         );

person Rajeev    schedule 06.09.2016    source источник
comment
Возможный дубликат Django скачать файл   -  person Sayse    schedule 06.09.2016
comment
дубликат: вам нужно отправить заголовок Content-Disposition   -  person Anentropic    schedule 06.09.2016
comment
даже если я не отправлю заголовок Content-Disposition для файла csv, он загружается, чем теперь отличается файл txt   -  person Rajeev    schedule 06.09.2016


Ответы (2)


Кстати, почему вы используете «application/json» для файла .txt, а не .json?

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

Вы можете попробовать атрибут загрузки HTML5: http://www.w3schools.com/TAgs/att_a_download.asp

Другие решения, предлагаемые здесь: Принудительно открыть Сохранить как... всплывающее окно, открытое по текстовой ссылке, щелкните для pdf в HTML

person djangonaut    schedule 06.09.2016

Вы пытаетесь вернуть .txt, но он настроен на возврат .json

Сдача

return HttpResponse(JsonResponse(response), content_type="application/json")

to:

return HttpResponse(JsonResponse(response), content_type="application/default")

Я пробовал с этим кодом, и он работает:

from django.conf import settings
from django.http import HttpResponse, Http404

def download(self, request, path):
        file_path = os.path.join(settings.MEDIA_ROOT, path)
        if os.path.exists(file_path):
            with open(file_path, 'rb') as fh:
                response = HttpResponse(fh.read(), content_type="application/default")
                response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
                return response
        raise Http404
person Natan Almeida de Lima    schedule 09.02.2021