`
Yangjinghuan
  • 浏览: 48105 次
  • 性别: 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();
        }  
}
分享到:
评论

相关推荐

    跨域测试文件网页的直接测试.zip

    本压缩包文件"跨域测试文件网页的直接测试.zip"包含了用于测试跨域情况的相关文件,帮助开发者理解和解决跨域限制带来的困扰。 首先,我们要理解什么是跨域。在Web应用程序中,同源策略是一个重要的安全政策,它...

    Silverlight跨域文件

    设置好跨域文件后,Silverlight应用就可以无阻碍地从其他域获取数据了。这在实现如AJAX请求、数据绑定或者与其他Web服务交互等功能时特别有用。不过,跨域策略不仅适用于Silverlight,也适用于Flash和其他遵循相同...

    jQuery File Upload 可跨域的多图片上传

    `jQuery File Upload` 支持CORS(跨源资源共享)协议,允许用户在不同的域之间上传文件,这极大地扩展了Web应用的可能性,尤其是在需要与API或后端服务交互时。 2. **HTML5 API支持**: - `jQuery File Upload` ...

    高度自适应 跨域访问实例下载

    在这个"高度自适应跨域访问实例下载"中,我们看到三个HTML文件:iframe.html、agent.html和main.html,它们可能是用于演示如何在不同环境下实现跨域通信和页面适应性。 1. **跨域访问**:在Web浏览器的安全策略下,...

    跨域上传文件,多服务器相互调用

    3. formData与XMLHttpRequest:在现代浏览器中,我们可以使用`FormData`对象和`XMLHttpRequest`或`fetch` API来实现跨域文件上传。`FormData`可以封装文件数据,然后通过HTTP请求发送到服务器。 4. CSRF(Cross-...

    geoserver2.19.5免安装版本下载已修改过跨域问题

    跨域问题在Web开发中是一个常见挑战,由于浏览器的安全策略,JavaScript通常不允许从一个源(域、协议或端口)加载资源到另一个源。为了解决这个问题,服务器需要配置允许来自不同源的请求,这就是CORS的用途。在...

    Silverlight 跨域策略文件.zip

    对于Silverlight应用程序来说,当它尝试从一个不同的域加载数据时,会自动检查目标服务器的根目录下是否存在这样的策略文件。如果存在并且文件中允许该源访问,那么跨域通信就可以进行。 在Silverlight中,跨域策略...

    ext struts2 swfupload 跨域文件上传

    "ext struts2 swfupload 跨域文件上传"这个主题涉及到三个关键技术和概念:EXTJS(Ext JS)、Struts2以及SwfUpload,它们共同解决了Web应用中的跨域文件上传问题。 EXTJS是一种强大的JavaScript库,用于构建富...

    pdf.js,内含跨域解决办法

    对于 PDF.js 而言,如果 PDF 文件存储在与网页不同的域下,可能会引发跨域问题,导致 PDF 无法正常加载。 为了解决跨域问题,PDF.js 提供了几种解决方案: 1. 服务器端配置:在服务器端设置 CORS 头部,允许来自...

    silverlight wcf 跨域访问 内含WORD图解和跨域文件

    本资料包“silverlight wcf 跨域访问 内含WORD图解和跨域文件”正是为了解决这一问题,通过详细的文档和示例文件,帮助开发者理解和解决跨域访问的挑战。 首先,让我们理解什么是跨域访问。在Web开发中,浏览器的...

    pdf.js 跨域版本

    在 PDF.js 原版中,如果 PDF 文件存储在与网页不同的域,可能会受到这个限制,导致无法正常加载。而这个修改版的 pdf.js 解决了这个问题,使得开发者可以更加灵活地在各种环境中使用。 乱码问题通常是由于字体支持...

    Vue中跨域及打包部署到nginx跨域设置方法

    众所周知,我们在做前后端分离项目的时候,经常需要在本地起前端工程,接口希望拉取服务端的实际数据而不是本地的mock数据,而如果本地程序直接访问...以vue-cli搭建的项目为例, 在webpack配置文件 /config/index.js, 由

    flash跨域策略文件crossdomain.xml配置详解以及防范措施.docx

    总结,Flash 跨域策略文件 crossdomain.xml 是控制 Flash 应用程序跨域访问的关键。正确配置 crossdomain.xml 可以确保数据的安全传输,防止恶意跨域攻击。然而,配置不当可能导致敏感信息泄露或被利用,因此在设置...

    ArcGIS Server 10.2跨域jar包

    1. **下载跨域jar包**:从提供的压缩包中提取出跨域jar文件。 2. **放置jar包**:将jar文件添加到ArcGIS Server的`<arcgisserver_install_dir>/java/lib`目录下,这是ArcGIS Server加载自定义Java类的位置。 3. **...

    C#webapi文件上传下载源码

    5. **Content-Disposition**:HTTP响应头,用于指示浏览器如何处理响应内容,如设置为"attachment"则会触发文件下载。 6. **文件I/O操作**:在服务器端处理文件上传时,需要了解如何在磁盘上读写文件。 7. **安全...

    php main 与 iframe 相互通讯类 同域 跨域)

    本文将详细讲解"PHP main与iframe相互通讯类 同域 跨域"这一主题,以及如何利用提供的文件实现这一功能。 首先,我们要理解同域和跨域的概念。同域是指两个或多个页面的源(协议+域名+端口)相同,它们之间可以自由...

    通过JavaScript下载文件到本地的方法(单文件)

    #### 知识点一:同源文件下载 在开发中,对于同源的文件,我们可以利用HTML `<a>` 标签的 `download` 属性来实现文件的下载功能。`download` 属性指示浏览器下载 URL 而不是导航到它,因此文件会被自动保存到本地。 ...

    signalR跨域及解决方案

    在 ASP.NET Core 中,可以在 Startup.cs 文件中的 `ConfigureServices` 方法中添加 CORS 配置,如下: ```csharp services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder....

    Geoserver解决Tomcat跨域问题文件.rar

    标题中的“Geoserver解决Tomcat跨域问题文件”指的是针对使用Geoserver与Tomcat部署Web服务时遇到的跨域限制的解决方案。在Web开发中,跨域问题是一个常见的安全问题,它源于浏览器的同源策略,限制了JavaScript从一...

Global site tag (gtag.js) - Google Analytics