文件下载

来源:互联网 发布:公安大数据应用与问题 编辑:程序博客网 时间:2024/06/05 22:46

1、需要导入的文件:在WebRoot下新建文件夹common

(1)需要导入的jstl标签:tag.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

(2)需要引入jQuery easyui的js文件:jquery.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'jquery.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!-- 引入jquery easyui的css样式 --><link rel="stylesheet" type="text/css"href="${pageContext.request.contextPath}/themes/default/easyui.css"><link rel="stylesheet" type="text/css"href="${pageContext.request.contextPath}/themes/icon.css"><!-- 引入jQuery easyui的js文件 并且引入了jquery.js文件 --><script type="text/javascript"src="${pageContext.request.contextPath}/js/jquery.min.js"></script><script type="text/javascript"src="${pageContext.request.contextPath}/js/jquery.easyui.min.js"></script></head><body></body></html>

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0"    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_3_0.xsd">  <servlet>    <servlet-name>UploadServlet</servlet-name>    <servlet-class>servlet.UploadServlet</servlet-class>  </servlet>  <servlet>    <servlet-name>DownFileServlet</servlet-name>    <servlet-class>down.DownFileServlet</servlet-class>  </servlet>  <servlet>    <servlet-name>ListFileServlet</servlet-name>    <servlet-class>down.ListFileServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>UploadServlet</servlet-name>    <url-pattern>/uploadFile.do</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>DownFileServlet</servlet-name>    <url-pattern>/downfile.do</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>ListFileServlet</servlet-name>    <url-pattern>/listFile.do</url-pattern>  </servlet-mapping> </web-app>


UploadServlet.java


package servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.ProgressListener;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);//判断上传的类型if(fileUpload.isMultipartContent(request)){//设置大小fileUpload.setFileSizeMax(1024*1024*20);//1M//设置编码fileUpload.setHeaderEncoding("UTF-8");    //滚动条的进度fileUpload.setProgressListener(new ProgressListener() {@Overridepublic void update(long pBytesRead, long pContentLength, int pItems) {System.out.println("到现在为止"+pBytesRead+"字节已上传,总大小为"+pContentLength+"----"+pItems);}});try {List<FileItem>  fileItems=fileUpload.parseRequest(request);    //fileItem 对应 upfilefor(FileItem fileItem:fileItems){//判断是否是普通的文本if(fileItem.isFormField()){String name=fileItem.getFieldName();String value=fileItem.getString();System.out.println(name+":"+value);}else{//获取上传文件的名称String fileName=fileItem.getName();int index=fileName.lastIndexOf("\\");if(index!=-1){fileName=fileName.substring(index+1);}/*int index1=fileName.lastIndexOf(".");String name=fileName.substring(index1);String suffix=fileName.substring(index1);*///添加时间戳fileName=System.currentTimeMillis()+"_"+fileName;//设置保存的路径String path=request.getServletContext().getRealPath("/WEB-INF/upload");//创建保存的文件File file=new File(path,fileName);//获取请求的输入流对象InputStream is=fileItem.getInputStream();//输出流对象FileOutputStream fos=new FileOutputStream(file);//缓冲区大小byte[] buffer=new byte[1024];//读取长度int len=0;//读取 如果读取的结果为-1 证明读取完毕,否则继续读取while((len=is.read(buffer))!=-1){//写入文件fos.write(buffer,0,len);}//关闭流的操作fos.close();is.close();//删除临时文件fileItem.delete();}}request.getRequestDispatcher("/listFile.do").forward(request, response);} catch (FileUploadException e) {String message=e.getMessage();if(message.contains("permitted size of")){request.setAttribute("msg", "文件上传过大");}request.getRequestDispatcher("./upload.jsp").forward(request, response);e.printStackTrace();}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

滚动条的进度

ListFileServlet.java

package down;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ListFileServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 遍历WEB—INF/upload下面的所有文件 并保存到map集合中// 获取下载的路径String path = request.getServletContext().getRealPath("/WEB-INF/upload");// 获取下载路径的文件对象File file = new File(path);Map map = new HashMap();listFile(file, map);// 把文件存储到map中request.setAttribute("map", map);request.getRequestDispatcher("./listfile.jsp").forward(request,response);}private void listFile(File file, Map map) {File files[] = file.listFiles();for (File f : files) {if (f.isFile()) {String fileName = f.getName();int index = fileName.indexOf("_");if (index != -1) {map.put(fileName, fileName.substring(index + 1));} else {}} else {listFile(f, map);}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

DownFileServlet.java

package down;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DownFileServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        //文件下载        //获取下载的文件名称String fileName=request.getParameter("fileName");//找到下载文件的具体路径String filePath=request.getServletContext().getRealPath("/WEB-INF/upload/"+fileName);//根据路径创建文件File file=new File(filePath);//设置下载的类型  告诉浏览器  ,需要以什么方式下载操作response.setContentType("application/x-msdownload");//下载response.setHeader("content-disposition", "attachment;fileName="+java.net.URLEncoder.encode(fileName, "UTF-8"));//写出的流OutputStream os=response.getOutputStream();//创建输入流对象FileInputStream fis=new FileInputStream(file);byte[] buffer=new byte[1024];int len=0;while((len=fis.read(buffer))!=-1){os.write(buffer,0,len);}os.close();fis.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}


upload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ include file="/common/tag.jsp"%><%@include file="/common/jquery.jsp"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'upload.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function checkUpload(){     //$("#upfile").val();     var $upfile= $("#upfile");     if($upfile.val()==""){     return false;     }     return true;}</script></head><body><form action="${pageContext.request.contextPath}/uploadFile.do"enctype="multipart/form-data" onsubmit="return checkUpload()"method="post"><table><tr><td colspan="2">${requestScope.msg}</td></tr><tr><td><input type="file" name="upload" id="upfile"></td></tr><tr><td ><input type="submit" value="上传"></td></tr></table></form></body></html>


listfile.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ include file="/common/tag.jsp"%><%@include file="/common/jquery.jsp"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><!-- 下载方式 以流的方式进行处理 --><c:forEach var="m" items="${requestScope.map}"><c:url var="downurl" value="./downfile.do"><c:param name="fileName">${m.key}</c:param></c:url><a href="${downurl}">${m.value}</a><br/></c:forEach></body></html>


0 0