需要: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.javapackage 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
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.javapackage 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();	}}
新聞熱點
疑難解答