`

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

阅读更多

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

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

相关推荐

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...

    JAVA_API1.8中文文档(CHM版).rar

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JAVA_API1.6文档(中文)

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JavaAPI1.6中文chm文档 part1

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java 1.6 API 中文 New

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java api最新7.0

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java jdk-api-1.6 中文 chmd

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JavaAPI中文chm文档 part2

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java 面试题 总结

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...

    [Java参考文档]

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    PDF文件的制作 (可移植文档格式)分类: JAVA

    PDF文件不管是在Windows,Unix还是在苹果公司的Mac OS操作系统中都是通用的……目前已成为数字化信息事实上的一个工业标准

    超爽的自学课件(java)

    <br>(8) 第8章:对象的容纳 对一个非常简单的程序来说,它可能只拥有一个固定数量的对象,而且对象的“生存时间”或者“存在时间”是已知的。但是通常,我们的程序会在不定的时间创建新对象,只有在程序运行...

    [Java参考文档].JDK_API 1.6

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    包含通用对象类的库叫作类库。 2.2.7 多态型 面向对象程序的最后一个概念是多态性。凭借多态性,你可以创建一个新的对象,它具 有与基对象相同的功能,但是这些功能中的一个或多个是通过不同的方式完成...

    1_6_zh_CN.CHM

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    超级有影响力霸气的Java面试题大全文档

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出...

    JDK_API_1_6_zh_CN_downcc.com.zip 良心一级分

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

Global site tag (gtag.js) - Google Analytics