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. Android项目目录结构模板以及简单说明

    1) src  文件 编写java代码的文件目录,遵循java的命名规范.分包 2) gen  文件      包含了android的资源文件的标识符,是不需要程序员维护,是自动添加的 3) asse ...

  2. RTSP协议进行视频取流的方法、注意点及python实现

    在视频应用中,我们一般都需要基于摄像头或录像机的视频流进行二次开发,那么就涉及到如何将视频流取出来. 在摄像机安装好之后,一般是通过局域网与本地的服务器进行连接,要取录像机的视频流就要在局域网范围内进 ...

  3. 简单java队列

    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. 以下实例演示了队 ...

  4. hdu1026Ignatius and the Princess ,又要逃离迷宫了

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1026/ 题意就是一个迷宫,然后有些位置上有守卫,守卫有一个血量,要多花费血量的时间击败他,要求从(0,0)到(n ...

  5. mysqlbinlog错误:Error in Log_event::read_log_event(): 'read error'

    环境: mysql 5.6 ; binlog  3.4 ; binlog_format MIXED ; .报错: mysqlbinlog -v --start-position=166084123 m ...

  6. Springboot学习笔记【持续更新】

    1.Springboot四大核心: 自动配置 与Spring应用程序和常见的应用功能,Springboot能自动提供相关配置 起步依赖 告诉Springboot需要什么功能,它就能引入需要的依赖库 A ...

  7. Vue路由配置history模式

    我的博客: https://github.com/Daotin/fe-notes/issues vue需要node.js吗? 你可以用 script 标签的形式引入vue.min.js 这样的,不需要 ...

  8. 《JavaScript 模式》读书笔记(5)— 对象创建模式4

    我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分. 七.对象常量 JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句.作为一种变通方 ...

  9. js 拖拽 鼠标事件,放大镜效果

    设置网站播放视频 只有一个是播放的 //需要引入jquery var v = $("video") v.bind("play",function(){ for( ...

  10. Redis 集群--------Redis-cluster

    1集群方案 1.官方方案redis-cluster搭建实战 2.客户端分片技术(不推荐),扩容/缩容时,必须手动调整分片程序,出现故障不能自动转移 3.可以使用主从复制方式(不推荐) 4.使用一些代理 ...