对于web开发中的下载文件,程序只需要通过response获得文件输出流,剩下的就交给浏览器了。
不用想太复杂啊不用理保存到本地的姿势啊!那是浏览器的工作~
- @RequestMapping
- public void download(HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- response.setContentType("text/html;charset=UTF-8");
- BufferedInputStream in = null;
- BufferedOutputStream out = null;
- request.setCharacterEncoding("UTF-8");
- String rootpath = request.getSession().getServletContext().getRealPath(
- "/");
- String fileName = request.getParameter("f");
- fileName=CommonProperty.getValue(fileName);
- try {
- File f = new File(rootpath + "template/" + fileName);
- response.setContentType("application/x-excel");
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Disposition", "attachment; filename="+fileName);
- response.setHeader("Content-Length",String.valueOf(f.length()));
- in = new BufferedInputStream(new FileInputStream(f));
- out = new BufferedOutputStream(response.getOutputStream());
- byte[] data = new byte[1024];
- int len = 0;
- while (-1 != (len=in.read(data, 0, data.length))) {
- out.write(data, 0, len);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- in.close();
- }
- if (out != null) {
- out.close();
- }
- }
- }
程序实现下载需设置两个响应头:
•设置Content-Type 的值为:
application/x-msdownload
。
Web
服务器需要
告诉浏览器其所输出的内容的类型不是普通的文本文件或 HTML 文件,
而是
一个要保存到本地的下载文件。
•
Web
服务器希望浏览器不直接处理相应的
实体内容,而是
由用户选择将相应
的实体内容保存到一个文件中,这
需要设置
Content-Disposition
报头。该报头指定了接收程序处理数据内容的方式,在 HTTP 应用中
只有
attachment
是标准方式,attachment 表示要求用户干预。在 attachment 后面还可以指定 filename 参数,该参数是服务器建议
浏览器将实体内容保存到
文件中的文件名称。在设置 Content-Dispostion 之前一定要指定 Content-Type.