首页 > 技术文章 > 文件下载

StephenChowcai 2017-09-02 19:47 原文

学习时练习代码:

第一部分: servlet类中代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

     response.setContentType("text/html;charset=utf-8");
  
    //得到下载文件
    File file = new File("E:/小星星.mp3");
    //判断文件是否存在
    if(file.exists()) {
     //如果存在,创建文件输入流
   
     FileInputStream fis = new FileInputStream(file);
     //设置文件名编码格式
     URLEncoder.encode(file.getName(), "utf-8");
     //创建缓冲字节数组-缓冲区大小
     byte[] b = new byte[fis.available()];
     //读入字节流
     fis.read(b);
     //设置编码格式为utf-8
     response.setCharacterEncoding("utf-8");
     //激活文件下载框,设置保存文件的名称
     response.setHeader("Content-Disposition", "attachment;filename = 'hahaha'");
     //构造输出流
     ServletOutputStream sos = response.getOutputStream();
     //写文件流
     sos.write(b);
     //关闭流
     fis.close();
     sos.close();
    }

 }

第二部分:完整的例子代码如下

  1:首先创建一个jsp,我取名为:fileDownload.jsp

  主要代码如下:

  <%@ page language="java" contentType="text/html; charset=UTF-8"

  %>

  <!DOCTYPE>

  <html>

  <body>

  <form >

  <a href="/123/fileDownload?file=java基础知识.txt">java基础知识</a>

  </form>

  </body>

  </html>

  对上面的代码解释如下:

  <a href="/123/fileDownload?fileName=java基础知识.txt">

  123代表的是创建的整个项目的名称。

  fileDownload是随意起的名称,为了配置xml时用的。

  ?fileName=java基础知识.txt是传给服务器fileName的名称。

2:创建一个servlet,我取名为FileDownloadServlet

  代码如下:

  import java.io.FileInputStream;

  import java.io.IOException;

  import java.io.OutputStream;

  import javax.servlet.ServletException;

  import javax.servlet.annotation.WebServlet;

  import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // TODO Auto-generated method stub

  doPost(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  String filename = request.getParameter("fileName"); // 获取文件名称

  filename = new String(filename.getBytes("ISO-8859-1"), "utf-8");// 解決中文乱码问题

  String path = getServletContext().getRealPath("/fileDownload/" + filename);// 获取要下载文件的全路径地址

  response.setContentType(this.getServletContext().getMimeType(filename));// 文件下载设置

  response.addHeader("Content-Disposition", "attachment,filename=" + filename);

  FileInputStream fis = new FileInputStream(path);// 创建文件的输入流

  OutputStream os = response.getOutputStream();// 得到一个文件输出流,可以向浏览器输出数

  int len = 0;// 表示实际每次读取多少个字节

  byte[] buff = new byte[1024];// 创建一个缓冲字节数组

  while ((len = fis.read(buff)) > 0) {

  os.write(buff, 0, len);

  }

  fis.close();// 关闭资源

  os.flush();

  os.close();

  }

}

3:配置WEB-INF下的web.xml,添加如下内容

  <servlet>

  <servlet-name>fileDownload</servlet-name>

  <servlet-class>com.123.servlet.FileDownloadServlet</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>fileDownload</servlet-name>

  <url-pattern>/fileDownload</url-pattern>

  </servlet-mapping>

4:大功告成,可以测试运行了。

 

推荐阅读