jsp实现文件上传以及表单验证

废话不多说,这里面涉及到两个文件,下面看例子:

Upload.java

 

public class Upload extends HttpServlet {

	 
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		doPost(request,response);
 
	}

 
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		
		request.setCharacterEncoding("utf-8");
		final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值

		// 允许上传的文件格式的列表

		final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "png",

		"swf", "bmp"};

		response.setContentType("text/html");

		// 设置字符编码为UTF-8, 统一编码,处理出现乱码问题

		response.setCharacterEncoding("UTF-8");


		// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload

		DiskFileItemFactory dfif = new DiskFileItemFactory();


		dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘


		dfif.setRepository(new File(request.getRealPath("/")

		+ "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录

		// 用以上工厂实例化上传组件

		ServletFileUpload sfu = new ServletFileUpload(dfif);

		// 设置最大上传大小

		sfu.setSizeMax(MAX_SIZE);


		PrintWriter out = response.getWriter();

		// 从request得到所有上传域的列表

		List fileList = null;

		try {

		fileList = sfu.parseRequest(request);

		} catch (Exception e) {// 处理文件尺寸过大异常

		if (e instanceof SizeLimitExceededException) {

		out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
		out.println("<script>parent.callback(' 注意文件大小!!')</script>");
		return;

		}

		e.printStackTrace();

		}

		// 没有文件上传
	// out.println("<script>parent.callback(' 请选择上传文件!')</script>");
		if (fileList == null || fileList.size() == 0) {

		
	out.println("<script>parent.callback(' 请选择上传文件!')</script>");//////callback()函数是show.jsp文件中的回传函数

		return;

		}

		// 得到所有上传的文件

		Iterator fileItr = fileList.iterator();




		// 循环处理所有文件
		 
		
		while (fileItr.hasNext()) {

		FileItem fileItem = null;

		String path = null;

		long size = 0;

		// 得到当前文件

		fileItem = (FileItem) fileItr.next();

		// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
		int count=1;
	 //  if (fileItem == null || fileItem.isFormField()) {
		 //	  if( fileItem.isFormField()){
				 
			//  }
 			//System.out.println(fileItem.getName()+"="+request.getParameter(fileItem.getName()));
		//	System.out.println(fileItem.getFieldName()+"="+fileItem.getString());
			
		//	System.out.println(fileItem.getString());
		//	continue;

	   //}

		// 得到文件的完整路径

		path = fileItem.getName();
		
		// 得到文件的大小

		size = fileItem.getSize();

		if ("".equals(path) || size == 0) {

 		// out.println("<script>parent.callback(' 请选择上传文件!')</script>");//
//
//		return;
			continue;

		}


		// 得到去除路径的文件名

		String t_name = path.substring(path.lastIndexOf("\\") + 1);

	 System.out.println(t_name);

		// 得到文件的扩展名(无扩展名时将得到全名)

		String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);

		// 拒绝接受规定文件格式之外的文件类型

		int allowFlag = 0;

		int allowedExtCount = allowedExt.length;

		for (; allowFlag < allowedExtCount; allowFlag++) {

		if (allowedExt[allowFlag].equals(t_ext))

		break;

		}

		if (allowFlag == allowedExtCount) {

		out.println("<script>parent.callback(' 注意图片文件类型!')</script>");

		for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)

		out.println("*." + allowedExt[allowFlag] + " ");

		return;

		}


		long now = System.currentTimeMillis();

		// 根据系统时间生成上传后保存的文件名

		String prefix = String.valueOf(now);

		// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下

		String u_name = request.getRealPath("/") + "ImagesUploaded/"

		+ prefix + "." + t_ext;

		//String filename = prefix + "." + t_ext;

		//根据原文件名保存文件

		String filename=t_name;

		try {

		 
 
			fileItem.write(new File(u_name));///////////////////将文件上传保存到指定目录
			
		 
		System.out.println(filename+"");
		
		
	 	//out.println("文件上传成功. 已保存为: " + t_name

		// + " 文件大小: " + size + "字节<p />");
		out.println("<script>parent.callback(' 将图片路径插入编辑器: "+request.getContextPath()+"/ImagesUploaded/"+prefix + "." + t_ext+"')</script>");
		

		} catch (Exception e) {

		e.printStackTrace();

		}

		}
	
		
		 

		 
	}

}


show.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
<!-- javascript s -->
<script type="text/javascript">  
	function 

callback(msg) {  
		document.getElementById("file").outerHTML = document.getElementById("file").outerHTML;
		document.getElementById("msg").innerHTML = "<font color=red>"+msg+"</font>";
	}
	 
		function t1(){
	 var form=document.getElementById("formfile");
		form.submit();
		}
</script>
    
    
    
    

  </head>
  
  <body>
     
    
    <div> 
      
    
    
<form action="oj_manage/upload" id="formfile" name="formfile" encType="multipart/form-data" method="post" target="hidden_frame" >
	 <input type="file" id="file" name="filepath" style="width:450">
	<input type="button" value="上传文件" onclick="t1()"><span id="msg"> </span>
	 <br>
	<font color="red">支持JPG,JPEG,GIF,BMP,SWF,BNG文件的上传</font>
	 <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
 
    
  </body>
</html>


 

 

其中jsp中还涉及到表单的验证!!!详情可以看:

http://www.blogjava.net/sliverfancy/archive/2012/02/25/370767.html

 

下面是一些文件上传的截图:

 

 

jsp实现文件上传以及表单验证_第1张图片

 

jsp实现文件上传以及表单验证_第2张图片

 

jsp实现文件上传以及表单验证_第3张图片

 

 

你可能感兴趣的:(jsp实现文件上传以及表单验证)