文件上传下载的简单实现

<%@page language="java" pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.util.List"%>
<%@page import="java.util.Iterator"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.Hashtable"%>
<%@page import="java.io.File"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.io.FileInputStream"%>
<%!	
	public static String getFileName(){		
		Calendar cal = Calendar.getInstance();
		return cal.getTimeInMillis()+"";
	}
%>
<%
	String dir = "upload";
	Map<String,String> filemaps = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");
	if(filemaps==null){
		filemaps = new Hashtable<String,String>();
		request.getSession().getServletContext().setAttribute("filemaps",filemaps);
	}


	//try{
		if("up".equals(request.getParameter("action"))){
			List<String> errfiles = new ArrayList<String>();
			DiskFileUpload fileupload = new DiskFileUpload();
			fileupload.setHeaderEncoding("GBK");
			fileupload.setSizeMax(1500 * 1024); 
			fileupload.setSizeThreshold(1500 * 1024); 
			List fileItems = fileupload.parseRequest(request); 
			Iterator iter = fileItems.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (!item.isFormField()) { 
					String name =item.getName();
					String savename = getFileName();
					
					
					int indx = name.lastIndexOf(".");
					String suffix = name.substring(indx);//从n开始到结束,即取出后缀名
					filemaps.put(savename+suffix,new String(name.getBytes("gbk"),"utf-8"));
					
					InputStream istream = item.getInputStream();
					String path = request.getSession().getServletContext().getRealPath(dir);
					try{						
						File f = new File(path+"\\"+savename+suffix);
						f.createNewFile();					
						FileOutputStream fout = new FileOutputStream(path+savename+suffix);
						byte buffer[] = new byte[8192];
						int count = 0;
						while ((count = istream.read(buffer)) > 0) {
							fout.write(buffer, 0, count);
						}
						fout.close();
						item.delete(); 
						System.out.println("***************");
					}catch(Exception e){
						e.printStackTrace();
						errfiles.add(filemaps.get(savename));
						filemaps.remove(savename);
					}		
					
					request.setAttribute("errfiles",errfiles);
				}			
			}			
		}
		
	//}catch(Exception e){
	//	e.printStackTrace();
	//}	
		if("delete".equals(request.getParameter("action"))){
			String filename = request.getParameter("filename");
			String path = request.getSession().getServletContext().getRealPath(dir);
			File f = new File(path+"\\"+filename);
			f.delete();
			System.out.println("_________:"+filemaps.size());
			filemaps.remove(filename);			
			System.out.println(filemaps);
			request.getSession().getServletContext().setAttribute("filemaps",filemaps);
		}
		
		if("load".equals(request.getParameter("action"))){
			OutputStream os = null;
			InputStream istream = null;
			BufferedInputStream bis = null;
			String filename = request.getParameter("filename");
			try {
				os = response.getOutputStream();
				response.reset();
				response.setHeader("Content-disposition", "attachment; filename="	+ filename);
				response.setContentType("application/javascript");
				String path = request.getSession().getServletContext().getRealPath(dir);
				istream = new FileInputStream(path+filename);
				bis = new BufferedInputStream(istream);
		      	byte data[] = new byte[1024];
		      	int size = 0;
		      	size = bis.read(data);
		      	while(size!=-1){
		        	os.write(data);
		        	size = bis.read(data);
		      	}
		    }catch(Exception expt){
		      expt.printStackTrace();
		    }finally{
		      try {
			        if (bis != null) {
			          bis.close();
			        }
			        if (istream != null) {
			        	istream.close();
			        }
			        if (os != null) {
			          os.close();
		        	}
		      	} catch (Exception ex) {
		        	ex.printStackTrace();
		      	}
			}		
		}		
%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=GBK">
		<script language="javascript" type="text/javascript" >
			function deletefile(name){
				window.location.href="upload.jsp?action=delete&filename="+name;				
			}
			function downloadfile(name){
				window.location.href="upload.jsp?action=load&filename="+name;				
			}
		</script>
		<style type="text/css">
			body{
				font-size:13px;
			}
			table{
				font-size:13px;
			}
		</style>
	</head>
	<body>
		
		<div>
			<div>上传文件:</div>
			<form method="post" enctype="multipart/form-data" action="upload.jsp?action=up">
				<input type="file" name="file" />
				<input type="submit" value="确认" />
			</form>
			
		</div>
		<div>
			<div>文件详情:</div>
			<div>
				<table>
					<tbody>
						<%
							boolean flag = true;
							Map<String,String> files = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");
							if(files!=null&&files.size()!=0){
								flag=false;
								for(Map.Entry<String,String> m:files.entrySet()){								
						%>					
						<tr><td><span name="<%=m.getKey()%>"><%=m.getValue() %></span></td><td><a href="javascript:downloadfile('<%=m.getKey()%>');" >下载</a>&nbsp;&nbsp;<a href="javascript:deletefile('<%=m.getKey()%>');" >删除</a></td></tr>
						<%						
								}
							}
							List<String> errfiles = (List<String>)request.getAttribute("errfiles");
							if(errfiles!=null&&errfiles.size()!=0){
								flag=false;
								for(String m:errfiles){		
						%>
											
						<tr><td><span><%=m%></span></td><td><span style="font:red;" >上传失败</span></td></tr>
						<%						
								}
							}
							
							if(flag){
						%>
							<tr><td><span>还未上传任何文件!</span></td></tr>
						<%	
							}
						%>
					</tbody>
				</table>
			</div>
		</div>
	</body>
</html>
 

猜你喜欢

转载自greatjone.iteye.com/blog/1161285