使用Ajax下载DOCX文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ajax下载DOCX文档相关的知识,希望对你有一定的参考价值。

我使用以下js脚本将变量从Web表单发布到python脚本,然后生成docx文档,然后响应ajax POST下载它,我可以成功获取文件但是在尝试时它似乎已损坏用word打开(可能由于编码错误),文件大小约为300K,但下载时大小为500K

我想使用ajax脚本的原因是我可以完全处理这种情况,有时服务器端python脚本会返回错误,我想使用ajax向用户显示这个以了解发生了什么上。

如何修改js脚本以正确保存docx文件。我已经为ajax帖子尝试了不同的dataType,但是当使用除text类型之外的任何东西时我得到解析错误。

码:

var url = $('#myform').attr('action');

var data = $('#myform').serialize();

$.ajax({
    type: "post",
    url: url,
    data: data,
    dataType: 'text',
    success: function(responseData,textStatus, xhr)
    {
        console.log('got response' + textStatus + xhr.getResponseHeader("Content-Disposition"));
        var blob=new Blob([responseData],{type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"});
        var link=document.createElement('a');
        link.href=window.URL.createObjectURL(blob);
        link.download="test.docx";
        link.click();
    },
    error: function (jqXHR, exception) 
    {
         var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.
 Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.
' + jqXHR.responseText;
        }
        console.log(msg);
    } 

})
答案

这似乎是jQuery的一个有点已知的问题,它可以破坏二进制文件,因为中间转换为字符串。

不过,请检查here提供的解决方案。如果这不符合您的需求,那么您可能想要使用this修复。

以上是关于使用Ajax下载DOCX文档的主要内容,如果未能解决你的问题,请参考以下文章

IIS下不能下载文件的docx文档,XLSX文档的设置方法(转)

python 解析docx文档的方法,以及提取插入的文本对象和图片

文档的内容类型(ContentType)

为啥 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件?

PHP - 使用正确的 MIME 类型打开上传的 DOCX 文件

Python如何操作word文档,Python-docx类库的使用