unduh file txt secara otomatis dari Django

Dalam kode berikut, jika saya mengubah format output file menjadi output.csv, file akan diunduh secara otomatis, tetapi jika saya mengubah format menjadi output.txt, file akan ditampilkan di browser. Cara mengunduh file output.txt secara otomatis

Karena file csv diunduh, apa masalahnya dengan file txt untuk kode yang sama

   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 sumber
comment
Kemungkinan duplikat dari Django mengunduh berkas   -  person Sayse    schedule 06.09.2016
comment
duplikat: Anda perlu mengirim header Content-Disposition   -  person Anentropic    schedule 06.09.2016
comment
bahkan jika saya tidak mengirim header Disposisi Konten untuk file csv, file tersebut sedang diunduh, apa bedanya file txt sekarang   -  person Rajeev    schedule 06.09.2016


Jawaban (2)


Sebagai tambahan, mengapa Anda menggunakan "application/json" untuk file .txt daripada .json?

Sulit untuk mengontrol secara andal apa yang dilakukan browser berbeda dengan file atau jenis konten tertentu di sisi server, karena browser berperilaku sesuai dengan preferensi pengguna: buka di browser, buka dialog simpan sebagai, buka di program pihak ketiga, tangani dengan plugin , dll.

Anda dapat mencoba Atribut unduhan HTML5: http://www.w3schools.com/TAgs/att_a_download.asp

Solusi lain diusulkan di sini: Paksa untuk membuka Simpan Sebagai... popup terbuka di tautan teks klik untuk pdf dalam HTML

person djangonaut    schedule 06.09.2016

Anda mencoba mengembalikan .txt, tetapi sudah diatur untuk mengembalikan .json

Mengubah

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

to:

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

Saya sudah mencoba dengan kode ini dan berhasil:

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