POST方式下载文件,使用form代替ajax发送请求

参考链接:https://blog.csdn.net/wild46cat/article/details/52437554


需求说明:

前端请求后台文件批量下载页面表单html的pdf文件,之前采用的方式是先用ajax请求在服务器生成文件,然后通过链接访问下载,这是两次请求完成下载,但是项目使用了nginx实现负载均衡,所以两次请求可能不会访问同一个应用服务器,导致第二次请求无法访问到第一次请求生成的文件,所以需要一次请求即可下载文件。

问题:

  1. 下载html转成的pdf文件时,需要浏览器渲染,需要从前台获取到完整的html代码,传到后台,涉及到很多数据,所以不能用get请求;
  2. ajax可以使用post请求,但是不会触发浏览器下载文件的动作。

 解决方式:使用临时form表单使用post方式提交消息

1. 创建函数

var DownLoadFile = function (options) {
        var config = $.extend(true, { method: 'post' }, options);
        var $iframe = $('<iframe id="down-file-iframe" enctype="multipart/form-data" />');
        var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
        $form.attr('action', config.url);
        for (var key in config.data) {
            $form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
        }
        $iframe.append($form);
        $(document.body).append($iframe);
        $form[0].submit();
        $iframe.remove();
    };

2. 调用函数

var postData = {"file_ids":arrSelIDs,"form_html":arrSelHTMLs,"isarray":isArray,"basepath":basepath};
uiConfirm("您确定导出选中的公文附件?",function () {
         DownLoadFile({url:'BPMSyncAction.do?_funccode_=FileExportAttToZip',data:postData});
});

遇到问题及解决方式

  1. 由于input的value是html代码字符串,导致后台无法接收全部的html字符串,只能接受部分html代码

         这里采用了jquery.base64.js文件,讲html字符串进行base64编码,然后就可以传输了

 感谢大神,记录一下

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值