Leslie_96 2017-11-07 02:55 采纳率: 50%
浏览 1107

关于下载中文名称文件浏览器显示500

DownServlet

public class DownServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// request.setCharacterEncoding("utf-8");
// response.setContentType("text/html;charset=utf-8");

    System.out.println("已经收到要下载的文件名称啦。。。。");

    // 1 获取客户端请求下载的文件名称.
    String filename = request.getParameter("filename");

    // 解决GET方式请求的参数中文乱码问题:
    filename = new String(filename.getBytes("ISO-8859-1"), "utf-8");

    // 2 通过文件名称,查询数据表.
    QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    String sql = "SELECT * FROM filesave WHERE filename=?";
    try {
        FileSave filesave = runner.query(sql, new BeanHandler<FileSave>(FileSave.class), filename);

        // 3 通过查询到的保存路径,读取具体文件.
        InputStream in = new FileInputStream(new File(filesave.getSavepath()));

        // 4 获取服务器端的响应输出流
        OutputStream out = response.getOutputStream();

        // 获取客户端请求头中的User-Agent
        String userAgent = request.getHeader("User-Agent");
        if (userAgent.contains("MSIE")) {
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else {
            // 其他浏览器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        }

        /*
         * 通知浏览器:文件是需要下载的,而不是显示的. * 为下载设置ContentType和Content-Disposition
         */
        response.setContentType(getServletContext().getMimeType(filename));
        response.setHeader("Content-Disposition", "attachment;filename=" + filename);

        // 5 利用IOUtils工具类的copy()方法
        IOUtils.copy(in, out);

        // 6 释放资源
        in.close();

// out.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doGet(request, response);
}

}


download.jsp

a href="${pageContext.request.contextPath }/servlet/DownServlet?filename=黑臀.jpg">黑臀.jpg
a href="${pageContext.request.contextPath }/servlet/DownServlet?filename=哈哈.xls">2.xls
a href="${pageContext.request.contextPath }/servlet/DownServlet?filename=3.html">3.html

a href="${pageContext.request.contextPath }/servlet/DownServlet?filename=4.txt">4.txt


  • 写回答

3条回答 默认 最新

  • Leslie_96 2017-11-07 02:59
    关注

    jsp页面主要代码就是这样的

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序