博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于SpingMVC实现文件下载你所不知道的
阅读量:7241 次
发布时间:2019-06-29

本文共 1882 字,大约阅读时间需要 6 分钟。

文件的上传下载一般在项目中还是非常实用的,此处专门整理一下文件的下载,至于文件的上传实现将在后续中补上。文件的下载多用于模板文件的下载,这在项目中用的还是挺多的。今天用到了就整理出来了,以供搬运工们借鉴并使用,已验证无误。

(1)     前台实现

前台实现非常简单,不像文件上传那样复杂,只要给出一个超链接,链接到后台处理的方法,并且需要将文件名传入Controller。

(2)     后台处理

后台的Controller就主要处理这样几个问题:

①根据文件名,找到模板文件

②设置响应的形式、文件头、编码

③通过流的形式读取模板文件内容并将之写入输出流

④关闭输入输出流

(3)     下面我们根据前台后台的实现思路来具体看一下实现代码:

①前台:

  ②后台:

@RequestMapping(value = "/downloadTemplate",method = RequestMethod.GET)    public String downloadAbilityTemplate(String fileName,HttpServletRequest request,HttpServletResponse response){        response.setCharacterEncoding("utf-8");//设置编码        response.setContentType("multipart/form-data");//设置类型        response.setHeader("Content-Disposition", "attachment;fileName="+ fileName);                                       //设置响应头        try {        String filePath = Config.getValue("path");//获取配置文件中模板文件所在目录        String path = request.getSession().getServletContext().getRealPath("/")+filePath;//获取模板文件的相对目录        InputStream inputStream = new FileInputStream(new File(path+ File.separator + fileName));        OutputStream os = response.getOutputStream();        byte[] b = new byte[2048];        int length;        while ((length = inputStream.read(b)) > 0) {                os.write(b, 0, length);        }//边读模板文件边写入输出流        os.close();        inputStream.close();//关流        } catch (FileNotFoundException e) {                e.printStackTrace();        } catch (IOException e) {                e.printStackTrace();        }        return null;                //注意此时return null}

  

(4)     注意点:

①返回模型层应该是return null,否则出现如下错误:

java+getOutputStream() has already been called for this response

②模板文件的位置可以根据需要存放,只要在后台能获取到此文件的全路径就行

放在class目录下获取是:

//获取classes所在路径

String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();

//获取WebRoot目录:

String path = request.getSession().getServletContext().getRealPath("/")

行走在设计师的路上!

 

转载地址:http://pnybm.baihongyu.com/

你可能感兴趣的文章
十一、jdk命令之Jstatd命令(Java Statistics Monitoring Daemon)
查看>>
iOS开发小技巧--TableView Group样式中控制每个section之间的距离
查看>>
18.OGNL与ValueStack(VS)-值栈入门
查看>>
Linux进程间通信-匿名管道
查看>>
servlet过滤器配置白名单、黑名单
查看>>
linux下cmake编译安装、配置和卸载mysql
查看>>
HDU2639Bone Collector II[01背包第k优值]
查看>>
SPOJ GSS3 Can you answer these queries III[线段树]
查看>>
Linux软件安装
查看>>
怎么使用jquery判断一个元素是否含有一个指定的类(class)
查看>>
samba 最简单配置 共享
查看>>
看完这篇让你对各种前端build工具不再懵逼!
查看>>
精通移动端布局
查看>>
怎么运行 ASP.NET Core控制台程序
查看>>
IOS蓝牙项目总结
查看>>
django一对多 增 删 改 查
查看>>
Sqoop Export原理和详细流程讲解
查看>>
浅谈对java中锁的理解
查看>>
ASP.NET Core MVC之ViewComponents(视图组件)知多少?
查看>>
在天河二号上对比Julia,Python和R语言
查看>>