解决jsp下载文件,迅雷下载路径不显示文件名称的问题

如果浏览器安装了迅雷的插件,在jsp页面调用java后台实现文件下载功能时,会自动弹出迅雷下载,迅雷的下载路径会显示.do或者.xhtml之类的,为了解决这个问题,jsp页面修改如下:

写一个<a>标签在页面上:

<a id="downloadUrl" target="_blank"></a>

导出按钮如下:

<a href="javascript:void(0)" id="biz_exp_button" class="easyui-linkbutton"
    data-options="iconCls : ‘icon-download‘,plain:true" onclick="javascript:DataMonitor.file_download(‘wbj‘);">导出</a>

js代码如下:

var DataMonitor = {
    file_download : function(param)
        {
        url = CONTEXT_PATH + "/sjjk/file_download/";
        var $a = $("#downloadUrl");
        if(param == ‘wbj‘){
            url += encodeURI("委办局接入数据") + ".xls";
            $a.attr("href", url)[0].click();
        }else if(param == ‘csjcj‘){
            url += encodeURI("城市级基础库数据") + ".xls";
            $a.attr("href", url)[0].click();
        }else {

        }
        $a.attr("href", null);
    }
};    

java代码如下:

@RequestMapping("file_download/{fileName}.xls")
    public void fileDownload(@PathVariable String fileName,
            HttpServletResponse response, HttpServletRequest request)
            throws Exception {
        // String type = request.getParameter("type");
        String type = null;
        String filename = "";
        if (null != fileName) {
            filename = fileName.concat(".xls");
            if ("委办局接入数据".equals(fileName)) {
                type = "wbj";
            } else if ("城市级基础库数据".equals(fileName)) {
                type = "csjcj";
            }
        }
        if (null == type) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        String userAgent = request.getHeader("User-Agent");
        if (userAgent.contains("MSIE") || userAgent.contains("Trident")
                || userAgent.contains("Edge")) {
            filename = java.net.URLEncoder.encode(filename, "UTF-8");
        } else {
            // 非IE浏览器的处理:
            filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
        }
        String realPath = request.getSession().getServletContext()
                .getRealPath("");
        String filePath = this.dataMonitorService
                .queryDataToExp(type, realPath);//生成xls文件,返回路径,根据自己的业务修改
        File file = new File(filePath);
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;fileName="
                + filename);
        response.setContentLength((int) file.length());
        ServletOutputStream out;
        try {
            FileInputStream inputStream = new FileInputStream(file);
            out = response.getOutputStream();
            int b = 0;
            byte[] buffer = new byte[512];
            while (b != -1) {
                b = inputStream.read(buffer);
                out.write(buffer, 0, b);
            }
            inputStream.close();
            out.close();
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
时间: 2024-08-06 08:16:53

解决jsp下载文件,迅雷下载路径不显示文件名称的问题的相关文章

AFHTTPSessionManager下载文件 及下载中 进度条处理,进度条处理需要特别注意,要加载NSRunLoop 中

1.下载文件 和进度条处理代码 - (void)timer:(NSTimer *)timer{ // 另一个View中 进度条progress属性赋值 _downloadView.progress = self.pressing; if (self.pressing >= 1.0) { [timer invalidate]; } } -(void)downloadWithUrlString:(NSString *)urlString { //1.创建会话管理者 AFHTTPSessionMana

jsp获得文件的绝对路径

当前WEB应用的物理路径:<%=application.getRealPath("/")%>当前访问的JSP文件的物理路径:<%=application.getRealPath(request.getRequestURI())%& gt;当前访问jsp文件的所在目录的物理路径: <%    String path=application.getRealPath(request.getRequestURI());    String dir=new jav

php 下载文件/直接下载数据内容

思路步骤 * 定义参数 * 魔术方法 * 执行下载 * 获取设置属性函数 * 获取设置文件mime 类型 * 获取设置下载文件名 * 设置header * 下载函数 实现代码 class DownFile{ // 定义参数 public $data; // 下载的数据或文件名 public $is_con=false; // 是否是下载内容 public $down_file_name; // 下载后的文件名 public $mime_type; //下载时设置的文件类型 public $fil

django 中下载文件与下载保存为excel

一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. 1.前端 实现方式:a标签+响应头信息(当然你可以选择form实现) <div class="col-md-4"><a href="{% url 'download' %}" rel="external nofollow

js下载文件;下载方式&lt;a&gt; 和href方式;已经中文乱码问题

一:先看看各种下载方式: 1. A 标签的方式 : <a target="_Blank" href="<%=basePath %>html/document/GJB/CYBDXZ/文件名.doc">文件名.doc</a> 2. href方式:   function go (name){                                             var url =  encodeURIComponent

通过Java WebService接口从服务端下载文件

一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的复杂度和系统对外暴露的接口.通过在服务端读取文件,返回字节流到客户端的方式比较简单. 下面采用restful的接口形式,满足SOA架构接口要求.如下代码拷贝到eclipse中即可运行,功能自测试运行正常.样例代码的服务端和客户端在同一台PC上运行,放到不同PC上运行改一下发布服务和请求服务的IP地址

Servlet实现文件的下载

(1)项目的主目录如下:(演示出image和servlet的位置所在) (2)具体实现的代码如下: package com.lc.HttpTest; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servle

LOADRUNNER上传及下载文件

(1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncType=multipart/form-data", "RecContentType=text/html", "Referer=https://t

PHP利用Curl实现多线程抓取网页和下载文件

PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery类来采集数据库,在此之外也可以用 Curl ,借助Curl 这个功能实现并发多线程的访问多个url地址以实现并发多线程抓取网页或者下载文件. 至于具体实现过程,请参考下面几个例子: 1.实现抓取多个URL并将内容写入指定的文件 $urls = array( '路径地址', '路径地址', '路径地址