TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
一、HTML文件:Testdown.html
<html>
<title>文件下载测试</title>
<body>
<p>下载单个文件</p>
<a href="/showimg/down?filename=/zip/1.zip">测试文件下载</a></br> <p>下载一个目录下的多个文件</p>
<a href="/showimg/ShowFile">去下载多个文件</a></br> </body></html> 二、Servlet文件
(1)下载单个文件:
- package com.tool;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @SuppressWarnings("serial")
- public class FileDownLoadServlet extends HttpServlet{
-
- @Override
- protected void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String path=request.getParameter("filename");
- path=new String(path.getBytes("ISO-8859-1"),"utf-8");
- download(path,request,response);
- }
-
- @SuppressWarnings("deprecation")
- public HttpServletResponse download(String path,HttpServletRequest request, HttpServletResponse response) {
- try {
- // path是指欲下载的文件的路径。
- File file = new File(request.getRealPath("/")+"/"+path);
- // 取得文件名。
- String filename = file.getName();
- // 取得文件的后缀名。
- //String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
- // 以流的形式下载文件。
- InputStream fis = new BufferedInputStream(new FileInputStream(file));
- byte[] buffer = new byte[fis.available()];
- fis.read(buffer);
- fis.close();
- // 清空response
- response.reset();
- // 设置response的Header
- response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
- response.addHeader("Content-Length", "" + file.length());
- OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
- response.setContentType("application/octet-stream");
- toClient.write(buffer);
- toClient.flush();
- toClient.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- return response;
- }
- }
复制代码 (2)显示某一目录下所有文件:
- package com.tool;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ShowFileServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String path = "c:/test";
- //声明集合存放目录下所有文件的文件名
- List
-
- fileList = new ArrayList
-
- ();
- File folder = new File(path);
- //判断文件夹是否存在并且是否是一个目录
- if(folder.exists() && folder.isDirectory()){
- //获得目录中所有文件及目录
- File[] files = folder.listFiles();
- for (File file : files) {
- //如果是文件
- if(file.isFile()){
- //将文件名放入集合中
- fileList.add(file.getName());
- }
- }
- }
- request.setAttribute("fileList", fileList);
- request.getRequestDispatcher("showfile.jsp").forward(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request,response);
- }
- }
-
-
复制代码 (3)下载某一目录下的多个文件
- package com.tool;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class DownLoadServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String path = "C:/test";
- String fileName = request.getParameter("filename");
- File file = new File(path + "/" + fileName);
- //如果文件存在
- if (file.exists()) {
- //设置响应类型及响应头
- response.setContentType("application/x-msdownload");
- response.addHeader("Content-Disposition", "attachment; filename=""
- + fileName + """);
- //读取文件
- InputStream inputStream = new FileInputStream(file);
- BufferedInputStream bis = new BufferedInputStream(inputStream);
- byte[] bytes = new byte[1024];
- ServletOutputStream outStream = response.getOutputStream();
- BufferedOutputStream bos = new BufferedOutputStream(outStream);
- int readLength = 0;
- while ((readLength = bis.read(bytes)) != -1) {
- bos.write(bytes, 0, readLength);
- }
- //释放资源
- inputStream.close();
- bis.close();
- bos.flush();
- outStream.close();
- bos.close();
- }
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
复制代码 三、web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaEE"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"> <display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>fileDownLoadServlet</servlet-name>
<servlet-class>com.tool.FileDownLoadServlet</servlet-class>
</servlet> <servlet>
<servlet-name>ShowFileServlet</servlet-name>
<servlet-class>com.tool.ShowFileServlet</servlet-class>
</servlet> <servlet>
<servlet-name>DownLoadServlet</servlet-name>
<servlet-class>com.tool.DownLoadServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>fileDownLoadServlet</servlet-name>
<url-pattern>/down</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>ShowFileServlet</servlet-name>
<url-pattern>/ShowFile</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>DownLoadServlet</servlet-name>
<url-pattern>/DownLoad</url-pattern>
</servlet-mapping> </web-app>
源码下载:http://file.javaxxz.com/2014/10/10/015503750.zip |
|