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

Java 专栏收录该内容
37 篇文章 0 订阅

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

新浪微博:IT国子监


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

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.     }  

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

String filePath=""; File file=new File(filePath); //解决乱码问题 String filename=URLEncoder.encode(file.getName(),"utf-8"); //重置输出流 response.reset(); Response.AddHeader("Content-Disposition", "attachment;filename="+filename);//设置文件response.addHeader("Content-Length",file.length);//设置下载文件大小 response.setContentType("application/octet-stream");//设置文件类型 OutputStream toClient=new BufferedOuntputStream( response.getOutputStream() );//获取二进制输出流 //读取文件数据 InputStream fis=new BufferedInputStream(new FileInputStream(filePath)); byte[] buffer=new byte[file.length()]; fis.read(buffer); fis.close(); //输出文件数据 toClient.write(buffer); toClient.close(); 文件类型如下: ".*"="application/octet-stream" ".001"="application/x-001" ".301"="application/x-301" ".323"="text/h323" ".906"="application/x-906" ".907"="drawing/907" ".a11"="application/x-a11" ".acp"="audio/x-mei-aac" ".ai"="application/postscript" ".aif"="audio/aiff" ".aifc"="audio/aiff" ".aiff"="audio/aiff" ".anv"="application/x-anv" ".asa"="text/asa" ".asf"="video/x-ms-asf" ".asp"="text/asp" ".asx"="video/x-ms-asf" ".au"="audio/basic" ".avi"="video/avi" ".awf"="application/vnd.adobe.workflow" ".biz"="text/xml" ".bmp"="application/x-bmp" ".bot"="application/x-bot" ".c4t"="application/x-c4t" ".c90"="application/x-c90" ".cal"="application/x-cals" ".cat"="application/vnd.ms-pki.seccat" ".cdf"="application/x-netcdf" ".cdr"="application/x-cdr" ".cel"="application/x-cel" ".cer"="application/x-x509-ca-cert" ".cg4"="application/x-g4" ".cgm"="application/x-cgm" ".cit"="application/x-cit" ".class"="java/*" ".cml"="text/xml" ".cmp"="application/x-cmp" ".cmx"="application/x-cmx" ".cot"="application/x-cot" ".crl"="application/pkix-crl" ".crt"="application/x-x509-ca-cert" ".csi"="application/x-csi" ".css"="text/css" ".cut"="application/x-cut" ".dbf"="application/x-dbf" ".dbm"="application/x-dbm" ".dbx"="application/x-dbx" ".dcd"="text/xml" ".dcx"="application/x-dcx" ".der"="application/x-x509-ca-cert" ".dgn"="application/x-dgn" ".dib
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值