zoukankan      html  css  js  c++  java
  • SpringMVC把后台文件打印到前台

    实现效果如下:

    代码为:

    @RequestMapping(value = "/tools/printContract")
    public void cell(HttpServletResponse response,HttpServletRequest request,String outName) {
        //根据outName获取到保存在服务器上的文件
        String filePath = request.getSession().getServletContext().getRealPath(ImgUtil.TOOLS_PATH+ImgUtil.TOOLS_TXT)+'/'+outName+".txt";
        try(OutputStream out = response.getOutputStream()) {
            Date currentTime = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_HHmmss");
            String dateString = formatter.format(currentTime);
            //fileName是输出的文件的名字(不支持中文),包括了后缀
            String fileName = "EncryptFile_" + dateString + ".txt";
            byte[] bytes = FileEcodeUtil.file2byte(filePath);
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition","attachment;filename=" + fileName);
            response.setContentLength(bytes.length);
            out.write(bytes);
            out.flush();
        } catch (IOException e) {
        //e.printStackTrace();
        }
    }
    
    //上面用到的file2byte方法为:
    public static byte[] file2byte(String filePath) {
        byte[] buffer = null;
        File file = new File(filePath);
        try (FileInputStream fis = new FileInputStream(file);
             ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            byte[] b = new byte[1024];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            buffer = bos.toByteArray();
        } catch (Exception e) {
            // e.printStackTrace();
        }
        return buffer;
    }

    需要注意:返回值的类型是void 而不是String,不能返回到某一个页面,否则服务器会抛出IllegalStateException异常,虽然在页面上表现不出来。

      java.lang.IllegalStateException: Cannot create a session after the response has been committed

    原创文章,欢迎转载,转载请注明出处!

  • 相关阅读:
    Java8新特性-日期时间
    解决有道云笔记导入md文件无法加载文件内的图片方式
    Mac安装Navicat Premium 12 永久破解
    MacBook Pro安装和配置Tomcat
    MySQL不支持DELETE使用表别名?
    JAVA设计模式之模板方法
    Lombok中的@Builder注解
    JAVA设计模式之策略模式
    Stream中的Peek操作
    MySql插入一条数据不提交事务主键仍自增的理解
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/springPrintFile.html
Copyright © 2011-2022 走看看