首页 > 编程 > Java > 正文

Java文件上传与下载

2019-11-06 07:59:55
字体:
来源:转载
供稿:网友

需要:commons-io.jar 和 commons-fileupload.jar

upload.jsp

<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  	<script type="text/Javascript">  		//全局变量  		var time = 0;  		function addLine(addButton){  			//创建内部div对象  			var divElement = document.createElement("div");  			//创建input对象[file类型]  			var inputElement1 = document.createElement("input");  			inputElement1.type="file";  			inputElement1.name="upfile";  			//创建input对象[button类型]  			var inputElement2 = document.createElement("input");  			inputElement2.type="button";  			inputElement2.value="删除";  			//对删除按钮添加事件监听  			inputElement2.onclick=function(){  				//取得该按钮所在行的直接父元素  				var divElement = this.parentNode.parentNode;  				//通过父元素删除直接子元素  				divElement.removeChild(this.parentNode);  				time--;  				if(time < 5){  					//按钮生效  					addButton.disabled=false;  					//addButton.style.visibility="visible";  				}  			}  			//依次将file类型和button类型的input对象加入到内部div对象中  			divElement.appendChild(inputElement1);  			divElement.appendChild(inputElement2);  			//再次内部div对象加入到外部div对象  			var outDivElement = document.getElementById("outDiv");  			outDivElement.appendChild(divElement);  			time++;  			if(time == 5){  				//将按钮失效  				addButton.disabled=true;  				//addButton.style.visibility="hidden";  			}	  		}  	</script>  </head>  <body>  	<form   		action="${pageContext.request.contextPath}/UploadServlet"   		method="POST"  		enctype="multipart/form-data">  		<table border="1" align="center">  			<caption>文件上传</caption>  			<tr>  				<th>上传用户</th>  				<td><input type="text" name="username"/></td>  			</tr>  			<tr>  				<th></th>  				<td>  					<div id="outDiv">  						<%--  						<div>							<input type="file" name="upfile"/>							<input type="button" value="删除"/>  							  						</div>  						--%>  					</div>  				</td>  			</tr>  			<tr>  				<th></th>  				<td>  					<input   						type="button"   						value="添加上传文件"  						onclick="addLine(this)"  					/>  				</td>  			</tr>  			<tr>  				<td colspan="2" align="center">  					<input type="submit" value="上传"/>  					<a href="${pageContext.request.contextPath}/ListFileServlet">  						显示下载文件  					</a>  				</td>  			</tr>  		</table>  	</form>  </body></html>UploadServlet.java

package cn.itcast.web.servlet.upload;import java.io.File;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 org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import cn.itcast.web.servlet.util.UploadUtil;public class UploadServlet3 extends HttpServlet {	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {		//创建上传文件工厂		DiskFileItemFactory factory = new DiskFileItemFactory();		//设置内存中缓存区的大小,默认10K		factory.setSizeThreshold(100*1024);		//设置上传文件临时存放的目录		String tempPath = this.getServletContext().getRealPath(UploadUtil.tempPath);		factory.setRepository(new File(tempPath));		//创建上传文件对象[核心]		ServletFileUpload upload = new ServletFileUpload(factory);		//设置上传文件的中文编码方式		upload.setHeaderEncoding("UTF-8");		//客户端上传文件是否使用MIME协议,		boolean flag = upload.isMultipartContent(request);		if(!flag){			//不是以MIME协议上传文件			throw new ServletException();		}else{			/*是以MIME协议上传的文件,解析request中的所有上传内容			 *每个内容封装成一个对象FileItem,			 *FileItem代表普通字段和上传字段二类			 */			try {				List<FileItem> fileItemList  = upload.parseRequest(request);				for(FileItem fileItem : fileItemList){					if(fileItem.isFormField()){						//必定是普通字段						String fieldName = fileItem.getFieldName();						String fieldValue = fileItem.getString("UTF-8");						System.out.PRintln(fieldName+":"+fieldValue);					}else {						//必定是上传字段						String realFileName = fileItem.getName();						//取得真实文件名						realFileName = UploadUtil.getRealFileName(realFileName);						//通过真实文件名换算出唯一个文件名						String uuidFileName = UploadUtil.makeUuidFileName(realFileName);						//通过位运算换算出upload目录下的子目录						String uploadPath = this.getServletContext().getRealPath(UploadUtil.uploadPath);						String uuidFilePath = UploadUtil.makeUuidFilePath(uploadPath,uuidFileName);						//取得文件输入流						InputStream is = fileItem.getInputStream();						//取得文件输出流						UploadUtil.doSave(is,uuidFileName,uuidFilePath);						//将上传文件产生的临时文件删除						fileItem.delete();						request.setAttribute("message","上传文件成功");						request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request,response);					}				}						} catch (Exception e) {				e.printStackTrace();				request.setAttribute("message","上传文件失败");				request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request,response);			}		}	}}list.jsp

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <body>  	<table border="1" align="center">  		<caption>下载文件列表</caption>  		<tr>  			<th>文件名</th>  			<th>操作</th>  		</tr>  		<c:forEach var="entry" items="${requestScope.map}">	  		<tr>	  			<td>${entry.value}</td>		  			<td>	  				<c:url var="myURL" value="/DownloadServlet">	  					<c:param name="uuidFileName" value="${entry.key}"/>	  				</c:url>	  				<a  href="${myURL}" 	  					style="text-decoration:none">	  					下载	  				</a>	  			</td>	  		</tr>  		</c:forEach>  	</table>  </body></html>DownloadServlet.java

package cn.itcast.web.servlet.download;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.web.servlet.util.UploadUtil;//下载文件到本地public class DownloadServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {		String uuidFileName = request.getParameter("uuidFileName");		byte[] buf = uuidFileName.getBytes("ISO8859-1");		uuidFileName = new String(buf,"UTF-8");		int index = uuidFileName.lastIndexOf("_");		String realFileName = uuidFileName.substring(index+1);		response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(realFileName,"UTF-8"));		String uploadPath = this.getServletContext().getRealPath(UploadUtil.uploadPath);		String uuidFilePath = UploadUtil.makeUuidFilePath(uploadPath,uuidFileName);		InputStream is = new FileInputStream(uuidFilePath+"/"+uuidFileName);		//模式:/WEB-INF/upload/12/4/43213_cc.jpg		OutputStream os = response.getOutputStream(); 		buf = new byte[1024];		int len = 0;		while((len=is.read(buf))>0){			os.write(buf,0,len);		}		is.close();		os.close();	}}


上一篇:java机试-抽奖

下一篇:java内部类

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表