从django自动下载txt文件

时间:2016-09-06 10:25:51

标签: django django-views

在下面的代码中,如果我将文件输出格式更改为output.csv,文件会自动下载,但如果我将格式更改为output.txt,则文件会显示在浏览器上。如何自动下载输出。 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"
         );

2 个答案:

答案 0 :(得分:0)

另外,为什么要使用" application / json"对于.txt文件而不是.json?

很难可靠地控制不同浏览器在服务器端使用某种文件或内容类型执行的操作,因为浏览器的行为符合用户的偏好:在浏览器中打开,打开另存为对话框,在第三方程序中打开,使用插件处理等

您可以尝试HTML5下载属性:http://www.w3schools.com/TAgs/att_a_download.asp

此处提出的其他解决方案:Force to open "Save As..." popup open at text link click for pdf in HTML

答案 1 :(得分:0)

您正在尝试返回 .txt,但它被设置为返回 .json

改变

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

到:

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