servlet下载,解决文件名中有中文下载路径出现乱码不能正常下载问题

方法很多种,我只试用了两种。

主页面JSP中引入下载功能所需的js文件。引入的时候设置编码格式例如

<script type="text/javascript" charset="UTF-8" src="${rsc}/pages/communicate/message/receiveMessage.js"></script>

然后下载方法需改进。下面改进的下载方法是基于本博客里的另一篇文章serlvet下载中的下载方法,下载路径中拼接的参数不要作为方法中带的参数传递。直接用request获取。这样就不会自行转码。

@RequestMapping("/download")
    @RolesAllowed(AuthorityDefine.ROLE_USER)
    public void download(HttpServletRequest request,
            HttpServletResponse response){
        try{
            String path=request.getParameter("path");
            String cat=request.getParameter("cat");
            File file = new File(Global.BASE_UPLOAD_FOLDER+"/"+ cat+"/"+path);
            String filename = file.getName();
            InputStream fis = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            response.reset();
            response.addHeader("Content-Disposition","attachment;filename="+ filename);
            response.addHeader("Content-Length","" + file.length());
            response.setContentType("application/octet-stream");
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        }     
        catch (IOException ex){
            ex.printStackTrace();
        }
    }

还有一种方式 是直接修改

配置时需要在tomcat(即相应的Servers)中的server.xml文件中的 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
    
    
    />加入useBodyEncodingForURI="true"

上一篇:构建混合云:配置Azure site to site VPN连接(1)


下一篇:TCP粘包拆包问题