SpringMVC如何把后台文件打印到前台

 更新时间:2020年09月25日 08:58:52   投稿:yaominghui  
这篇文章主要介绍了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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java优化hibernate性能的几点建议

    java优化hibernate性能的几点建议

    以上是在进行struts+hibernate+spring进行项目开发中,对hibernate性能优化的几点心得。
    2008-10-10
  • 关于Java for循环的正确用法介绍

    关于Java for循环的正确用法介绍

    Java里的循环结构我们可以通过while、do-while、for、foreach等方式实现循环,这篇文章会把这几种循环方式都给大家讲解到,但本文主要介绍for循环的使用,感兴趣的同学可以参考阅读
    2023-05-05
  • Java毕业设计实战之在线蛋糕销售商城的实现

    Java毕业设计实战之在线蛋糕销售商城的实现

    这是一个使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP开发的在线蛋糕销售商城,是一个毕业设计的实战练习,具有线上蛋糕商城该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • spring框架集成flyway项目的详细过程

    spring框架集成flyway项目的详细过程

    今天通过本文给大家分享spring框架集成flyway项目的详细过程,由于大多数都是springboot集成flyway,很少见到spring框架的项目,今天就抽空给大家介绍下spring框架集成flyway项目的方法,一起看看吧
    2021-07-07
  • SpringBoot2基于重复创建bean的问题及解决

    SpringBoot2基于重复创建bean的问题及解决

    这篇文章主要介绍了SpringBoot2基于重复创建bean的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 使用Feign远程调用时,序列化对象失败的解决

    使用Feign远程调用时,序列化对象失败的解决

    这篇文章主要介绍了使用Feign远程调用时,序列化对象失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot2.4.2下使用Redis配置Lettuce的示例

    SpringBoot2.4.2下使用Redis配置Lettuce的示例

    这篇文章主要介绍了SpringBoot2.4.2下使用Redis配置Lettuce,Springboot2.4.2下默认使用的就是Lettuce而不是Jedis因此无需在依赖进行排除Jedis,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • spring boot mybatis日志输出到控制台的方法实践

    spring boot mybatis日志输出到控制台的方法实践

    在开发过程中我们往往需要打印出SQL语句,这样就方便我们监控问题,本文主要介绍了spring boot mybatis日志输出到控制台的方法实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Springboot使用POI进行excel文件的导出与下载方式

    Springboot使用POI进行excel文件的导出与下载方式

    这篇文章主要介绍了Springboot使用POI进行excel文件的导出与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 浅谈java8 stream flatMap流的扁平化操作

    浅谈java8 stream flatMap流的扁平化操作

    这篇文章主要介绍了浅谈java8 stream flatMap流的扁平化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论