`
Yangjinghuan
  • 浏览: 46693 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

文件下载 (本域 及 跨域文件下载)

    博客分类:
  • Java
阅读更多
//文件下载 (本域 及 跨域文件下载)
public void downAnnex(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, int systemMark ,String annexPath) throws Exception {

response.setCharacterEncoding("utf-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
String filepath = "";
        String kidRootPath = "http://192.168.18.55:8888/kid/";//目标域的 域名

        if(systemMark == 1){//本服务哭器下载文件
        filepath = servlet.getServletContext().getRealPath("/" + annexPath);
        File uploadFile = new File(filepath);
            fis = new FileInputStream(uploadFile);
            bis = new BufferedInputStream(fis);
            fos = response.getOutputStream();
            bos = new BufferedOutputStream(fos);
          
            response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(annexPath.substring(annexPath.lastIndexOf("/")+1), "utf-8"));
            int bytesRead = 0;
           
            byte[] buffer = new byte[8192];
            while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
                bos.write(buffer, 0, bytesRead);
            }
            bos.flush();
            fis.close();
            bis.close();
            fos.close();
            bos.close();

        }else{//跨域下载文件
        filepath = kidRootPath + annexPath;
        HttpURLConnection huc = (HttpURLConnection) new URL(filepath).openConnection();  

    // 设置连接属性  
    huc.setDoOutput(true);  
    huc.setRequestMethod("POST");  
    huc.setUseCaches(false);  
    huc.setInstanceFollowRedirects(true);  
    huc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
    huc.connect();  

    // 往目标servlet中提供参数  
    OutputStream targetOS = huc.getOutputStream();  
    targetOS.write(filepath.getBytes());  
    targetOS.flush();  
    targetOS.close();  
   
      
    response.setContentType(huc.getContentType());  
    /*response.setHeader("Cache-Control", huc.getHeaderField("Cache-Control"));  
    response.setHeader("Pragma", huc.getHeaderField("Pragma"));  
    response.setHeader("Expires", huc.getHeaderField("Expires"));*/  
    response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(annexPath.substring(annexPath.lastIndexOf("/")+1), "utf-8"));
    OutputStream os = response.getOutputStream();  
   
    // 将目标servlet的输入流直接往页面输出  
    InputStream targetIS = huc.getInputStream();  
    int r;  
    while ((r = targetIS.read()) != -1) {  
    os.write(r);  
    }  
    targetIS.close();  
    os.flush();  
    os.close();  
   
    huc.disconnect();
        }  
}
分享到:
评论

相关推荐

    Jquery实现跨域异步上传文件总结

    我们需要换个思路去干这事,让服务端去重写向我们的客户端,由客户端(与文件上传页面在同域下)来返回相关数据即可。 1、Jquery.form的使用 <form method="post" action=...

    Iframe跨域自适应高度

    可以实现Iframe跨域自适应高度 main.htm和agent.htm文件放在www.a.com域内 iframe.htm放在www.b.com域内 这样就可以通过a.com域中的main.htm文件访问b.com域中的iframe.htm文件了

    jQuery.form插件的使用及跨域异步上传文件

    我们就不能用这种方式了,我们需要换个思路去干这事,让服务端去重写向我们的客户端,由客户端(与文件上传页面在同域下)来返回相关数据即可。 再做事 1 Jquery.form的使用 <form method=post action=...

    cross-domain:通过三层Iframe嵌套实现JS跨域访问

    使用在iframe中内嵌一个动态生成的指向与父页面同域的iframe实现跨域文件列表A域(父页面)中的文件cross_domain_transfer.html 实现跨域的关键文件,B域要指向的目标跨域跳转页面URL ;Parent.html A域示例页面,...

    php main 与 iframe 相互通讯类(js+php同域/跨域)

    JS:FrameMessage.js 实现调用方法的接口,如跨域则创建临时iframe,调用同域执行者。 PHP:FrameMessage.class.php 实现接收到跨域请求时,根据参数返回执行方法的JS code。 功能如下: 1.支持同域与跨域通讯 2....

    JS跨域解决方案之使用CORS实现跨域

    跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作...

    基于Jquery插件实现跨域异步上传文件功能

    我们需要换个思路去干这事,让服务端去重写向我们的客户端,由客户端(与文件上传页面在同域下)来返回相关数据即可。 再做事 1 Jquery.form的使用 <form method="post" action=...

    jQuery跨域问题解决方案

    通过XMLHTTPRquest请求不同域上的数据,原来js跨域访问是后台有个处理路径“/test”的函数。下面给大家介绍jQuery跨域问题解决方案,有需要的小伙伴可以参考下

    「JavaScript」JS四种跨域方式详解

    但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 二、通过修改document.domain来跨子域 浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法去...

    JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码

    通过JQuery可以跨域获取JSON数据,但必须弄清楚的是,JQuery不可以跨域获取任意JSON格式的数据,必须要通过服务端输出特定的针对JQuery跨域读取的JSON数据。你可能目前对此仍然毫无了解,没关系,本文将以最简单易懂...

    js实现跨域的4种实用方法原理分析

    但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是http://

    javascript跨域的4种方法和原理详解

    但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是...

    ASP.NET MVC中设置跨域访问问题

    主要介绍了ASP.NET MVC中设置跨域访问问题,需要的朋友可以参考下

    js中跨域方法原理详解

    但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是...

    JavaScript跨域请求库XDomain.zip

    只需要在同域下放置一个 proxy.html 文件即可。该库利用 XHook 来获取所有 XHR,可以无缝的和其他库协同工作。 Features Simple Library Agnostic With jQuery $.ajax (and subsequently $.get, $.post) With...

    浅谈js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。 ...

    基于CORS实现WebApi Ajax 跨域请求解决方法

    但是在使用API的时候总会遇到跨域请求的问题,特别各种APP万花齐放的今天,API的跨域请求是不能避免的。 在默认情况下,为了防止CSRF跨站的伪造攻击(或者是 javascript的同源策略(Same-Origin Policy)),一个网页...

    战歌音乐站点专用音乐播放器 v1.0.rar

    Alvin Player 测试版 本次测试版播放器,作者不保留任何版权信息,...由于flash的跨域加载问题,歌词文件需放在自己同域空间, 或进行相关跨域加载策略. 由于IE限制,播放器在本地不能使用,请上传到网络空间后方可使用。

    js跨域iframepostMessage提交表单

    利用iframe对form表单(含文件上传)进行跨任何域提交,无刷新且可以返回值

Global site tag (gtag.js) - Google Analytics