现在的位置: 首页 > 综合 > 正文

文件下载

2014年06月28日 ⁄ 综合 ⁄ 共 9533字 ⁄ 字号 评论关闭

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() {
				
				@Override
				public void update(long pBytesRead, long pContentLength, int pItems) {
						System.out.println("到现在为止"+pBytesRead+"字节已上传,总大小为"+pContentLength+"----"+pItems);				
				}
			});
			
			try {
			List<FileItem>  fileItems=fileUpload.parseRequest(request);
		    //fileItem 对应 upfile
			for(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>

抱歉!评论已关闭.