关闭

非ajax请求下载,不刷新页面,防止页面直接打开的问题,安全下载

1005人阅读 评论(0) 收藏 举报
分类:
ajax方式下载文件,比如txt、 word、 pdf、 jpg等,不需要在页面直接打开,实现异步下载,不刷新当前页面。

1.首先点击下载按钮,把所需要下载的参数,比如说下载地址,或者服务器可以检索出来的地址参数取得。
页面:
 <a id="mac_summary_download_btn"  class="btn btn-sm btn-default" target="_self" href="javascript:void(0)"> <span class="glyphicon glyphicon-download-alt"></span> 下载 </a> 
2.需要访问的下载地址action。
//下载事件
    $("#mac_summary_download_btn").click(function(){
        ROOF.Utils.showBlock();
        var trs = table.getSelectedTrNoClone();
        if (trs.length == 0 || trs.length > 1) {
            ROOF.Utils.alert('请选择一行记录!','','提示');
            ROOF.Utils.hideBlock();
            return false;
        }
        ROOF.Utils.hideBlock();
        var id = trs[0].find(":input[name='id']").val();
        var urlPath = basePathConst+"/mac/summaryAction/download.action";
        DownLoad(urlPath,id);
    });
3.使用js的方式创建一个新的form表单,设置1和2得到的下载地址及参数提交到服务器上。
js:

function DownLoad(urlPath,id) { 
    var form = $("<form>");   //定义一个form表单
    form.attr('style', 'display:none');   //在form表单中添加查询参数
    form.attr('target', '');
    form.attr('method', 'post');
    form.attr('action', urlPath);

    var input1 = $('<input>');
    input1.attr('type', 'hidden');
    input1.attr('name', 'id');
    input1.attr('value', id);
    $('body').append(form);  //将表单放置在web中 
    form.append(input1);   //将查询参数控件提交到表单上
    form.submit();
 }
4.在action方法中处理,使用输入流和输出流输出到页面下载
@RequestMapping("/download")
    public void download(Summary summary,HttpServletRequest request, HttpServletResponse response){
        Summary sum = summaryService.load(summary);
        if (sum != null) {
            // 设置读取的字节数
            int byteread = 0;
            // 取得文件名
            String fileName = sum.getFile_name();
            InputStream is = null;// 获取url中的输入流
            OutputStream os = null;
            try {
                // 如果是URL方式在得到输入流
                URL url = new URL(sum.getFile_path());// 创建URL对象
                is = url.openStream();// 获取url中的输入流
                os = response.getOutputStream();// 得到响应输出流对象
                // 设置下载头信息
                fileName = URLEncoder.encode(fileName, "UTF-8");
                response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
                response.setContentType("application/octet-stream;charset=UTF-8");
                //写入
                byte[] buffer = new byte[1204];
                while (is != null && (byteread = is.read(buffer)) != -1) {
                    os.write(buffer, 0, byteread);
                }
                os.flush();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                    }
                }
                if (os != null) {
                    try {
                        os.close();
                    } catch (IOException e) {
                    }
                }
            }
        }

    } 

0
0
查看评论

spring mvc + ajax实现无刷新下载文件

JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form,用这个form提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。前端代码:<...
  • javaloveiphone
  • javaloveiphone
  • 2017-04-13 14:18
  • 4188

ajax的无刷新文件下载

使用ajax,ajax的返回值类型是json,text,html,xml类型,或者可以说ajax的发送,接受都只能是string字符串,不能流类型,所以无法实现文件下载。 1、如果非要使用ajax的话,只能通过在回调函数里获得一个生成文件的相关url,通过创建一个iframe,并设置其src...
  • liuxiao723846
  • liuxiao723846
  • 2014-12-11 15:47
  • 904

不用刷新页面的文件上传和下载

  • 2008-09-07 16:53
  • 45KB
  • 下载

JS下载文件|无刷新下载文件

后台代码Handler.ashx using System; using System.Web; public class Handler : IHttpHandler { public void ProcessRequest (HttpContext context) {...
  • voodooer
  • voodooer
  • 2014-03-29 08:56
  • 9585

Ajax下载文件(页面无刷新)

说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果。实质上还是通过提交form表单来返回文件流的输出。 分步实现逻辑: ajax请求服务器,访问数据库,根据查询到的数据生成一个数据文件,返回前台一个json对象(可放置生成成功标记,文件路径等信...
  • CarryBest
  • CarryBest
  • 2017-04-27 09:20
  • 2232

ajax异步问题导致的刷新页面数据不更新

ajax的async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程。 ajax用它就是因为它的异步性,平时也都...
  • Amo_te_ama_me
  • Amo_te_ama_me
  • 2016-04-20 11:14
  • 14670

Java防止浏览器直接打开下载的文件

这个其实是在web.xml文件中配置mime下载文件类型就可以了,配置的示例:      doc   application/msword         xls   application/msexcel         pdf   application/pdf    ...
  • dy357978912
  • dy357978912
  • 2014-03-12 11:29
  • 1951

在java的WEB项目如何防止浏览器直接打开下载的文件

 java的web项目防止浏览器直接打开下载的文件,在web.xml文件中配置mime下载文件类型就可以了,配置的示例: doc application/msword xls application/msexcel pdf application/pdf ...
  • qw222pzx
  • qw222pzx
  • 2015-12-21 11:20
  • 2138

Java 下载文件不在浏览器中直接打开

今天在做一个文件下载,想下载一个.sis类型的文件。可下载的结果却总是在浏览器中直接打开了,并没有像我们平常去下载东西一样弹出一个可以选择为“打开或是保存”的文本框。搞了半天终于搞好了,现在想和大家来分享一下。     我们在编程的时候可以把html格式的文件通过se...
  • jasontome
  • jasontome
  • 2011-10-16 16:50
  • 1722

用Ajax实现不刷新页面修改内容

趁今天有空,就学习了Ajax,在Ajax in action那本书里提到了SAjax,就去下来看看,果然功能强大,让编写Ajax代码变的很简单,于是就写了个“修改内容不刷新页面”的代码,这个功能在网上以前是到处看到,今天终于自己实现了个,代码里有了PHP5的DOM函数,由于这个Blog空间只支持PH...
  • thx_bj
  • thx_bj
  • 2006-09-01 10:21
  • 6889
    个人资料
    • 访问:167842次
    • 积分:2586
    • 等级:
    • 排名:第16766名
    • 原创:106篇
    • 转载:38篇
    • 译文:0篇
    • 评论:23条
    文章分类
    最新评论