处理java servlet 下载弹出框显示文件的乱码

25 篇文章 0 订阅
    private String processFileName(String fileName,String agent) throws IOException{
        String codedfilename = null;
        if (null != agent && -1 != agent.indexOf("MSIE")){  
            String prefix = fileName.lastIndexOf(".")!=-1?fileName.substring(0,fileName.lastIndexOf(".")):fileName;
            String extension = fileName.lastIndexOf(".")!=-1?fileName.substring(fileName.lastIndexOf(".")):"";
            String name = java.net.URLEncoder.encode(fileName, "UTF8");
            if(name.lastIndexOf("%0A")!=-1){
                name = name.substring(0,name.length()-3);
            }
            int limit = 150 - extension.length();  
            if (name.length() > limit) {    
                name = java.net.URLEncoder.encode(prefix.substring(0, Math.min(prefix.length(), limit / 9)), "UTF-8");
                if(name.lastIndexOf("%0A")!=-1){
                    name = name.substring(0,name.length()-3);
                }
            }  

            codedfilename = name + extension;  
        } else if (null != agent && -1 != agent.indexOf("Mozilla")) {
            codedfilename = "=?UTF-8?B?"+(new String(org.apache.commons.codec.binary.Base64.encodeBase64(fileName.getBytes("UTF-8"))))+"?=";
        }else {  
            codedfilename = fileName;
        }  
        
        return codedfilename;
    }

   


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


        String username = request.getParameter("username");
        String filename = request.getParameter("filename");
        String fieldname = request.getParameter("fieldname");

        ServletContext servletContext = this.getServletContext();
        FileManageService fileManageService = (FileManageService) WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext).getBean(
                        "fileService");
        try {
            byte[] content = xxxx;//your download content

            if (content == null )
                content = new byte[0];
            response.setContentType("application/x-msdownload;charset=UTF-8");
            response.setHeader("Content-Length", String.valueOf(content.length));  
         String agent = request.getHeader("USER-AGENT");  
       String fileName =processFileName(filename,agent);

            logger.info("fileName:"+fileName);
            response.addHeader("Content-Disposition", "attachment; filename=\""    + fileName     + "\"");
            java.io.OutputStream os = response.getOutputStream();
            os.write(content);
            os.flush();
            os.close();
        } catch (ProcessNotFoundException e1) {
            logger.error(e1);
        } catch (Exception e1) {
            logger.error(e1);
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值