Django 无法在 Ajax 中下载 .docx 文件

2024-02-16

我有一个脚本指向 badownload 函数来下载.docx https://en.wikipedia.org/wiki/Office_Open_XML文件。该函数的结果是下载了.docx 文件,但它不起作用。

这是脚本。

   <script>
    $("#download_draft").click(function(){
        $("#download_draft").attr("disabled","disabled");
        $("#download_draft").text("Saving Data....");
        var json_data={};
        $(".input_data").each(function(){
            var value=$(this).val();
            var parent_html=$(this).parent();
            parent_html.html(value);
            $(this).remove();
        });
        var jenis_ba = $('#id_jenis_ba').val();
        json_data['jenis_ba'] = jenis_ba;
        var nomor= $('#id_nomor').val();
        json_data['nomor'] = nomor;
        var tanggal = $('#id_tanggal').val();
        json_data['tanggal'] = tanggal;
        var judul = $('#id_judul').val();
        json_data['judul'] = judul;
        var keterangan = $('#keterangan').val();
        json_data['keterangan'] = keterangan;

        var json_tim = [];
        $("tbody tr").each(function(row, tr){
            json_tim[row] = {
                'nama_tim' : $(tr).find('td:eq(0) input').val(),
                'nip_tim' : $(tr).find('td:eq(1) input').val()
            }
        });

        json_data['tim'] = json_tim;

        var string_data=JSON.stringify(json_data);

        const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
        $.ajax({
            url:'{{  download_draft }}',
            headers: {'X-CSRFToken': csrftoken},
            type:'GET',
            dataType: 'json',
            data:{data:string_data},
            success: function(data) {
                badownload(data);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(textStatus, errorThrown);
            },
            complete: function() {
                $("#download_draft").removeAttr("disabled");
                $("#download_draft").text("Download Draft");
            }
        });

        function badownload(result){
            $.ajax({
                url: '../../berita-acara/badownload',
                headers: {'X-CSRFToken': csrftoken},
                type:'POST',
                dataType: 'json',
                data:{data:result.result},
                success: function(data) {
                    console.log('sukses');
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log(url);
                },
            })
        }

    });
    </script>

这就是函数。它必须下载下载.docx文件,但它不起作用:

class BeritaAcaraBA(View):
    def post(self, request):
        .....
        ......
        .......
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
        response['Content-Disposition'] = 'attachment; filename=download.docx'
        document.save(response)
        return response

我尝试从下载 .docx 文件巴下载功能,但它不适用于Ajax。我是 Django 的新手。


如果文件已存在于文件服务器上,则准备好下载。

import os
from django.http import HttpResponse

class BeritaAcaraBA(View):
    def post(self, request):
        filepath = os.path.abspath(r"path\to\file.docx")
        if os.path.exists(filepath):
            with open(filepath, 'rb') as worddoc:
                content = worddoc.read()
                response = HttpResponse(content,content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
                response['Content-Disposition'] = 'attachment; filename=download.docx'
                response['Content-Length'] = len(content) #
                return response
        else:
            return HttpResponse("Failed to Download")

在脚本的success函数中,创建一个隐藏的<a>包含从响应中接收到的文件 URL 的元素。将其附加到文档正文并创建一个将开始下载文件的单击事件。

function badownload(result){
    $.ajax({
        url: '../../berita-acara/badownload',
        headers: {'X-CSRFToken': csrftoken},
        type:'POST',
        dataType: 'json',
        data:{data:result.result},
        success: function(data) {
            console.log('sukses');
            const downloadLink = document.createElement('a');
            downloadLink.href = data.file_url;
            downloadLink.download = 'download.docx';
            document.body.appendChild(downloadLink);
            downloadLink.click();
            document.body.removeChild(downloadLink);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(url);
        },
    })
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 无法在 Ajax 中下载 .docx 文件 的相关文章

随机推荐

  • Shiro/Stormpath 通过 REST

    我是新来的士郎 我们正在尝试将 Shiro 与 Stormpath 一起使用 我一直在尝试剖析这些例子 以找出我想做的解决方案 但到目前为止我还没有成功 目前 我只是尝试创建 REST 服务来执行我想要的操作 稍后我将绑定一个真正的客户端
  • 在 fork() 中,哪个将首先运行,父进程还是子进程?

    当以下代码运行时 我知道父级和子级都会运行在平行下调用 fork 后立即执行 include
  • Angular Js 路由 Google Chrome 问题

    使用下面提到的 Code1 在 Angular Js 中进行基本路由并获得 XMLHttpRequest 无法加载跨源请求仅支持以下协议方案 http data chrome extension https chrome extension
  • 在logstash中使用grok解析多行JSON

    我有一个 JSON 格式 SOURCE Source A Model ModelABC Qty 3 我正在尝试使用 Logstash 解析此 JSON 基本上我希望logstash 输出是一个键 值对列表 我可以使用kibana 进行分析
  • Embarcadero WindowHandleToPlatform C++ 的示例

    我需要一个用于 C 构建器的 WindowHandleToPlatform 示例 我想使用句柄对表单执行 bitblt 和其他功能 我可以使用 VCL 来做到这一点并且效果很好 认为 WindowHandleToPlatform 是 fir
  • 为什么我的音频 AVCaptureConnection 对于最高分辨率格式不起作用?

    我正在开发一个 iOS 项目 该项目使用 AVAssetWriter 和 AVAssetWriterInput 将音频和视频录制到文件中 当视频分辨率限制为 720x1280 时 一切似乎都运行良好 我现在尝试利用 AVCaptureDev
  • 替换 Android 内核中的触摸屏驱动程序

    我正在为我的定制板调整姜饼内核 我正在尝试更换使用片上 ADC 控制器 三星的 S5PV210 处理器 的电阻式触摸屏 在我的设计中 我需要一个由 eGalaxyTouch 驱动程序支持的电容式控制器 它已连接至 USB 可以从 make
  • 帮助简化 WordPress 中的 if while 列表循环

    可以很好地理解上面的代码 1 我可以删除if和while条件吗 使用直接地 2 我感觉if have posts 与while have posts 是裁员吗 1 呼叫the post没有循环只会让您显示单个帖子 这在单帖子页面上可能是理想
  • 提高 8086 二进制 -> 格雷码的效率

    我是汇编初学者 这是我设计的代码 用于从二进制转换为灰度 并以十六进制打印生成的位模式 mov al a mov bl al shr bl 1 xor al bl 虽然程序可以运行 但我想了解其他更简单的方法来提高效率 我尝试了很多其他方法
  • NullPointerException 使用链表时出错

    我刚刚完成了这个程序的工作并编译了它 但它在用户输入后中断并给了我这个 请在键盘上输入0个或多个值 12 4 3 2 1 Exception in thread main java lang NullPointerException at
  • 实现与 URLSession 发布者和合并的重新连接

    我想知道是否有一种方法可以实现重连机制与新的Apple框架结合并使用URLSession发布者 试图在 WWDC 2019 中找到一些例子 尝试玩waitsForConnectivity运气不好 它甚至没有在自定义会话中调用委托 tried
  • 对 JavaScript 原生类型进行原型设计,感到沮丧吗?

    在 JavaScript 原生类型 如数组 字符串 数字等 中构建附加功能原型是一个坏主意吗 我认为拥有像 myArr pop 等功能会很棒 但是如果有一天它成为 ECMAScript x 的一部分 并且与我的实现不同 那么它可能会破坏整个
  • “。”不能出现在常量表达式中

    我收到以下错误 cannot appear in a constant expression 对于此函数 第 4 行 bool Covers const Region
  • RISC-V指令集中的FENCE指令是什么意思?

    在浏览 RISC V ISA 时 我在内存模型部分看到了一条指令 FENCE 指令 它到底是什么意思 RISC V ISA 使用宽松的内存模型 其中一个线程执行的加载和存储的顺序在另一个线程看到时可能不同 这样做是为了启用提高内存系统性能的
  • 如何从HTML页面打开手机摄像头?

    我的 Android 手机通过 webview 连接到网络服务器 在我的 HTML 中 我有一个上传照片的按钮 用户应该可以选择上传图像或从相机拍摄照片 我的 HTML 代码是 div class takePhoto div
  • 如何在PowerShell中获取CPU功耗?

    有没有办法使用PS获取CPU功耗 打开硬件监视器 http openhardwaremonitor org 显然有办法返回该数字 但我无法在中找到相关代码欧姆的来源 https github com openhardwaremonitor
  • 如何让 loaderManager.initLoader 在片段中工作?

    我已经按照最友善的 kris larson 的建议进行了更改 但现在我没有从 onCreateLoader 返回正确的类型 return new StoriesLoader getContext uriBuilder toString 故事
  • 将 DataGridView 导出到 HTML 页面

    我试图找到这个问题的答案 但没有成功 我的问题是这样的 我有一个组合框 其中列出了要将报告导出到的不同格式 这些选项之一是 HTML 基本上我想要做的就是在 Windows 窗体中获取 dataGridView 并按原样导出到 HTML 页
  • Symfony 3 包创建总是抛出“编辑composer.json 文件”

    你好 我一直在学习 symfony 每次我使用 php bin consolegenerate bundle 命令创建一个包时 即使我默认保留所有内容 我仍然收到此错误 该命令无法自动配置所有内容 您需要手动进行以下更改 编辑compose
  • Django 无法在 Ajax 中下载 .docx 文件

    我有一个脚本指向 badownload 函数来下载 docx https en wikipedia org wiki Office Open XML文件 该函数的结果是下载了 docx 文件 但它不起作用 这是脚本