• 文件下载乱码处理


    文件下载乱码处理

        /**
         * 文件下载
         * 
         * @param id
         * @param basePath
         * @param response
         * @throws Exception
         */
        
        @RequestMapping(value = "/file_download", method = { RequestMethod.POST,RequestMethod.GET })
        public void downloadCommon(String id, HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            
            //调用ServletOutputStream或者Writer之前有效。
            //当使用的缓存已满时,容器必须立刻刷新把缓存的内容发送到客户端,如果这是第一个被发送到客户端的数据,那么response也会被认为是已提交
            response.reset();
            response.setHeader("Content-Type", "application/force-download");
            
            String encode = request.getParameter("encode");
            if (encode != null && !"".equals(encode)) {
                try {
                    request.setCharacterEncoding(ENCODING);
                } catch (UnsupportedEncodingException e) {
                    request.setCharacterEncoding(ENCODING);
                }
            } else {
                request.setCharacterEncoding(ENCODING);
            }
            
            String path = null;
            String fileName=null;
            String saveFileName=null;
            
            InputStream input =null;
            OutputStream output = null;
            
            try {
                
                // 构建流
                input = new FileInputStream(path + File.separator + fileName);
                output =response.getOutputStream();      
    
                if(request.getHeader("user-agent").indexOf("MSIE") != -1 || request.getHeader("user-agent").indexOf("like Gecko")!=-1) {
                    saveFileName = java.net.URLEncoder.encode(saveFileName,ENCODING);
                } else {
                    saveFileName = new String(saveFileName.getBytes(ENCODING),"iso-8859-1");   
                }
                //在response被提交前,头信息必须被设置,否则无效
                //Content-Disposition 设置文件名,文件名有空格时下载文件名错误的解决办法 \fileName\
                response.setHeader("Content-disposition", "inline;filename=\"" +saveFileName+"\"");
                
               // 输出文件流
                byte[] buffer = new byte[1024];
                int i = 0;
                while ((i = input.read(buffer)) != -1) {
                    output.write(buffer, 0, i);
                }
                
            } catch (Exception e) {
                
                //TODO
            } finally {
                try {
                    if(null !=output) {
                        output.flush();
                        output.close();
                    }
                    if(null !=input) {
                        input.close();
                    }
                } catch (Exception e) {
                }
            }
    
        }
  • 相关阅读:
    Generator函数介绍
    C语言基础三
    C语言基础二
    C语言基础一
    node——路由控制
    Node.js_HTTP模块
    node_Express安装及检验
    conda Pyhon版本切换
    JAVA泛型里面各值代表的意义
    jq实现表格多行列复制
  • 原文地址:https://www.cnblogs.com/meitanzai/p/5825719.html
Copyright © 2020-2023  润新知