Serendipity-Lv 2019-01-20 03:03 采纳率: 0%
浏览 745

利用JavaWeb实现下载操作时,文件名称含有中文。在访问时报如下错误。

#利用JavaWeb实现下载操作时,文件名称含有中文。在访问时报如下错误

信息: Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

##这是我的代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //获取文件的名称 
        String fileName=new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
        System.out.println(fileName);
        String type=request.getServletContext().getMimeType(fileName);
        //设置响应头信息 Content-type 
        response.setHeader("Content-Type", type);
        //设置响应头信息 Content-Disposition 让浏览器以下载的方式打开文件
        response.setHeader("Content-Disposition", "attachment;filename="+fileName);
         String mimeType=this.getServletContext().getMimeType(fileName);
         response.setContentType(mimeType);

        //创建流 输入和输出
        String path=request.getServletContext().getRealPath(fileName);
        InputStream in=new FileInputStream(path);//绝对路径
        OutputStream out=response.getOutputStream();
        int len=0;
        byte[] b=new byte[1024];
        while((len=in.read(b))!=-1){
            out.write(b, 0, len);
        }
        in.close();
        out.close();
    }

这是html页面a标签的内容

<a href="DownFileServlet?filename=file/jbit.log">下载jbit.log</a><br/>
<a href="DownFileServlet?filename=file/SpringMVCMybatis.rar">下载SpringMVCMybatis.rar</a><br/>
<a href="DownFileServlet?filename=file/第一章.txt">下载第一章.txt</a><br/>
<a href="DownFileServlet?filename=file/第二章进程管理.txt">下载第二章进程管理.txt</a><br/>

在网上找了很多教程,包括改server.xml和catalina.properties文件,也试过降低Tomcat版本,但是都没有解决
求助各位大佬有没有别的方法

  • 写回答

2条回答 默认 最新

  • 关注

    中文乱码的话,一般都是页面进行一次转码,servlet进行一次转码。

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)