java 下载文件乱码解决

@Get(“/downLoadDemoFile1”)

    public String downLoadDemoFile1(Invocation inv)  {

        

        

        

        String userAgent = inv.getRequest().getHeader(“User-Agent”);

        

        String filename1 = “操作说明.pdf”;

        

        //针对IE或者以IE为内核的浏览器:

        if (userAgent.contains(“MSIE”)||userAgent.contains(“Trident”)) {

            try {

                filename1 = URLEncoder.encode(filename1, “UTF-8”);

            } catch (UnsupportedEncodingException e) {

                

                // TODO Auto-generated catch block

                e.printStackTrace();

                

            }

        } else {

            //非IE浏览器的处理:

            try {

                filename1 = new String(filename1.getBytes(“UTF-8″),”ISO-8859-1”);

            } catch (UnsupportedEncodingException e) {

                

                // TODO Auto-generated catch block

                e.printStackTrace();

                

            }

        }

        

        

        String filename = “dgsx.pdf”;

        String path = Constants.DOWNLOAD_BASE_FOLD+”/demo/”+filename;

        

        logger.info(path);

        InputStream ins = null;

        BufferedInputStream bins = null;

        OutputStream outs = null;

        BufferedOutputStream bouts = null;

        

        try {

            path = new String(path.getBytes(“ISO-8859-1”), “UTF-8”);

            File file = new File(path);// 构造要下载的文件

            if (file.exists()) {

//                String suffix = path.substring(path.lastIndexOf(“.”) + 1);

                ins = new FileInputStream(path);// 构造一个读取文件的IO流对象

                bins = new BufferedInputStream(ins);// 放到缓冲流里面

                outs = inv.getResponse().getOutputStream();// 获取文件输出IO流

                bouts = new BufferedOutputStream(outs);

                inv.getResponse().setContentType(“application/octet-stream;charset=utf-8”);// 设置response内容的类型

//                inv.getResponse().setHeader(“Content-disposition”,”attachment;filename=\”” + URLEncoder.encode(“操作说明.pdf”, “UTF-8″)+”\””);// 设置头部信息

                

                

                

                inv.getResponse().setHeader(“Content-disposition”, String.format(“attachment; filename=\”%s\””, filename1));

//                inv.getResponse().setContentType(“application/vnd.ms-excel;charset=utf-8”);

                inv.getResponse().setCharacterEncoding(“UTF-8”);

                

                

                

                

                int bytesRead = 0;

                byte[] buffer = new byte[8192];

                // 开始向网络传输文件流

                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {

                    bouts.write(buffer, 0, bytesRead);

                }

                bouts.flush();// 这里一定要调用flush()方法

            } else {

                logger.info(“==============>>下载的文件不存在”);

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                if (ins != null) {

                    ins.close();

                    ins = null;

                }

                if (bins != null) {

                    bins.close();

                    bins = null;

                }

                if (outs != null) {

                    outs.close();

                    outs = null;

                }

                if (bouts != null) {

                    bouts.close();

                    bouts = null;

                }

            } catch (IOException e) {

                

                // TODO Auto-generated catch block

                e.printStackTrace();

                

            }

        }

        

        

        return “@”;

    }

    原文作者:指尖飘落的程序
    原文地址: https://blog.csdn.net/qq_33212500/article/details/62226903
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞