Java中都通用文件下载(ContentType、文件头、response、out四步骤)

新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian

 

我们就直接切入主题啦,文件下载只需要四步:

1.设置文件ContentType类型

2.设置文件头

3.通过response获取ServletOutputStream对象(out)

4.写到输出流(out)中

下载代码:

这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletContext对象,这个对象的用途,下面实例中有说明

下载,需要用到两个jar包:commons-fileupload.jar和commons-io.jar

Java代码 
  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.context.ServletContextAware;
  4. import javax.servlet.ServletContext;
  5. import javax.servlet.ServletOutputStream;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.*;
  8. @Controller
  9. public class FileController implements ServletContextAware{
  10. //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象
  11. private ServletContext servletContext;
  12. @RequestMapping("file/download")
  13. public void fileDownload(HttpServletResponse response){
  14. //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
  15. String path = servletContext.getRealPath("/");
  16. //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
  17. response.setContentType("multipart/form-data");
  18. //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)
  19. response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");
  20. ServletOutputStream out;
  21. //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)
  22. File file = new File(path + "download/" + "download.pdf");
  23. try {
  24. FileInputStream inputStream = new FileInputStream(file);
  25. //3.通过response获取ServletOutputStream对象(out)
  26. out = response.getOutputStream();
  27. int b = 0;
  28. byte[] buffer = new byte[512];
  29. while (b != -1){
  30. b = inputStream.read(buffer);
  31. //4.写到输出流(out)中
  32. out.write(buffer,0,b);
  33. }
  34. inputStream.close();
  35. out.close();
  36. out.flush();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. @Override
  42. public void setServletContext(ServletContext servletContext) {
  43. this.servletContext = servletContext;
  44. }
  45. }

Java中都通用文件下载(ContentType、文件头、response、out四步骤)的更多相关文章

  1. 文件下载(只需要简单的四步),Java中都通用

    我们就直接切入主题啦,文件下载只需要四步: 1.设置文件ContentType类型 2.设置文件头 3.通过response获取ServletOutputStream对象(out) 4.写到输出流(o ...

  2. idea中创建Java类时,自动在文件头中添加作者和创建时间

    在Settings中找到File and Code Templates 设置如下图所示. 效果展示:

  3. 常用文件的文件头(附JAVA测试类)

    1. MIDI (mid),文件头:4D546864 2. JPEG (jpg),文件头:FFD8FF 3. PNG (png),文件头:89504E47 4. GIF (gif),文件头:47494 ...

  4. myeclipse中java文件头注释格式设置

    转载:http://www.blogjava.net/yxhxj2006/archive/2014/01/14/408940.html myeclipse中java文件头注释格式设置  windows ...

  5. java通过文件头来判断文件类型

    import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; import java.ut ...

  6. response对象处理HTTP文件头(禁用缓存、设置页面自动刷新、定时跳转网页)

    response对象处理HTTP文件头 制作人:全心全意 禁用缓存 在默认情况下,浏览器将会对显示的网页内容进行缓存.这样,当用户再次访问相关网页时,浏览器会判断网页是否有变化,如果没有变化则直接显示 ...

  7. php通过文件头检测文件类型通用类(zip,rar…)(转)

    在做web应用时候,通过web扩展名判断上存文件类型,这个是我们常使用的.有时候我们这样做还不完善.可能有些人上存一些文件,但是他通过修改 扩展名,让在我们的文件类型之内. 单实际访问时候又不能展示( ...

  8. java/struts/Servlet文件下载与ftp文件上传下载

    1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...

  9. java基于feemarker 生成word文档(超级简单)

    问题由来: 开发个新需求,需要按规定导出word文档,文档截图如下 因为之前没做过这个,一脸懵B啊,导出excel和txt倒是经常接触到,对于这个word这种格式不严谨的文件怎么处理呢? 技术选型:可 ...

随机推荐

  1. 控制游戏/app使用期限/过期,证书有效期,弹出公告支持离线使用/后端控制,支持Swift、Objective-C集成非常简单,永久免费框架

    CertCheck.framework (for iOS) 只能运行于真机上,切勿在模拟器上使用 这是一个控制游戏/app使用期限(到设定的时间无法打开app),或发布弹出公告永久免费的框架,可以全版 ...

  2. C 2015年真题【保】

    1.编写一个完整的程序,使之能完成以下功能:从键盘中输入若干个整数,用链表储存这些输入的数,并要求存储的顺序与输入的顺序相反. 分析:链表建立[头插法] 代码: #include <stdio. ...

  3. jmeter3.3 接口压测入门和软件下载

    Jmeter3.3软件下载地址 https://download.csdn.net/download/qq_36625806/11076556 简单的使用教程 1.启动Jmeter 双击jemeter ...

  4. Contest 157

    2019-10-06 12:15:28 总体感受:总体难度一般,dfs和dp题花了点时间,最后一题dp有思路,但是实现上不够好. 注意点:首先是hard问题的覆盖度依然是很大的问题,其次是要注意审题. ...

  5. [bfs,深度记录] East Central North America Regional Contest 2016 (ECNA 2016) D Lost in Translation

    Problem D Lost in Translation The word is out that you’ve just finished writing a book entitled How ...

  6. Java基础语法(5)-特殊流程控制语句

    title: Java基础语法(5)-特殊流程控制语句 blog: CSDN data: Java学习路线及视频 1.嵌套循环结构 将一个循环放在另一个循环体内,就形成了嵌套循环.其中,for ,wh ...

  7. eNSP上NAT的配置

    NAT介绍: 早在20世纪90年代初,有关RFC文档就提出了IP地址耗尽的可能性.IPv6技术的提出虽然可以从根本上解决地址短缺的问题,但是也无法立刻替换现有成熟且广泛应用的IPv4网络.既然不能 立 ...

  8. C#面向对象--索引器

    一.索引器(Indexer)允许类和结构的实例像数组一样通过索引取值,可以看做是对[]运算符的重载,索引器实际上就是有参数的属性,也被称为有参属性或索引化属性,其声明形式与属性相似,不同之处在于索引器 ...

  9. mysql5.6配置文件详解(一)

    mysqld  Ver 5.6.11 for Linux on x86_64 (Source distribution)Copyright (c) 2000, 2013, Oracle and/or ...

  10. iOS pch

    Xcode6 之前会在 Supporting Files 文件夹下自动生成一个"工程名-PrefixHeader.pch"的预编译头文件,pch 头文件的内容能被项目中的其他所有源 ...