JQuery和Struts实现Ajax文件上传

首先说下使用的框架和插件:

struts1.3   jQuery1.3   ajaxupload.3.2.js(一个JQuery的插件,实现Ajax上传的效果)

COS(O’relly的一个性能很棒的上传组件)

jsp页面:

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ include file="../../common/taglibs.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<script type="text/javascript" src="${basePath }/script/jquery.js"></script>
  	<script type="text/javascript" src="${basePath }/script/ajaxupload.3.2.js"></script>
    <title>Ajax文件上传示例</title>
    <style type="text/css">
    	#loading,ol{
    		font-size:14px;
    		display:none;
    		color:orange;
    		display:none;
    	}
    	ol{
    		display:block;
    	}
    </style>
	<script type="text/javascript">
		$(function(){
			
			new AjaxUpload("#fileButton",{
				action:"${basePath}/file.do?method=upload",
				autoSubmit:true,
				name:"myfile",
				onSubmit:function(file, extension){
					if (extension && /^(pdf|jpg|png|jpeg|gif)$/.test(extension))
					{
						$("#loading").html('<img src="${basePath}/images/loading.gif">');
						$("#loading").show();
						$("#fileButton").attr("disabled","disabled");
					}
					else
					{
						$("#loading").html("你所选择的文件不受系统支持");
						$("#loading").show();
						return false;
					}
				},
				onComplete:function(file, extension){
					$("#loading").html("文件上传成功");
					$("#loading").show();
					$("#fileButton").removeAttr("disabled");
				}
			});
			
			
			new Ajax_upload('#button3', {
				action: '${basePath}/file.do?method=upload',
				name: 'myfile',
				autoSubmit:true,
				onComplete : function(file, extension){
					$('<li></li>').appendTo($('.files')).text(file);
				}	
			});
		});
	</script>
  </head>
  
  <body> 
    <input type="button" value="请选择您的照片" id="fileButton"/>
    <div id="loading"><img src="${basePath}/images/loading.gif"></div>
    <hr/>
   
    <form action="#" method="post">

		<input id="button3" type="file" />
		<p>上传成功的文件有:</p>
		<ol class="files"></ol>
		<p>
			<input class="submit" type="submit" value="表单提交"/>	
		</p>

	</form>

  </body>
</html>
StrutsAction代码:
package com.kay.crm.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.stereotype.Controller;

import com.kay.common.util.CosUtil;

@Controller("/file")
public class FileUploadAction extends DispatchAction {

	public ActionForward upload(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		

		String fileName = CosUtil.upload(request);
		System.out.println(fileName);
		
		return null;
	}
}
Cos的工具类:
package com.kay.common.util;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import com.oreilly.servlet.MultipartRequest;

public class CosUtil {

	@SuppressWarnings({ "deprecation", "unchecked" })
	public static String upload(HttpServletRequest request) throws IOException
	{
		//存绝对路径
		//String filePath = "C://upload";
		//存相对路径
		String filePath = request.getRealPath("/")+"upload";
		File uploadPath = new File(filePath);
		//检查文件夹是否存在 不存在 创建一个
		if(!uploadPath.exists())
		{
			uploadPath.mkdir();
		}
		//文件最大容量 5M
		int fileMaxSize = 5*1024*1024;
	
		//文件名
		String fileName = null;
		//上传文件数
		int fileCount = 0;
		//重命名策略
		RandomFileRenamePolicy rfrp=new RandomFileRenamePolicy();
		//上传文件
		MultipartRequest mulit = new MultipartRequest(request,filePath,fileMaxSize,"UTF-8",rfrp);
		
		String userName = mulit.getParameter("userName");
		System.out.println(userName);
		
		Enumeration filesname = mulit.getFileNames();
	      while(filesname.hasMoreElements()){
	           String name = (String)filesname.nextElement();
	           fileName = mulit.getFilesystemName(name);
	           String contentType = mulit.getContentType(name);
	           
	           if(fileName!=null){
	        	   fileCount++;
	           }
	           System.out.println("文件名:" + fileName);
	           System.out.println("文件类型: " + contentType);
	           
	      }
	      System.out.println("共上传" + fileCount + "个文件!");
	      
	      return fileName;
	}
}
Cos上传组件用到的重命名策略类:
package com.kay.common.util;

import java.io.File;
import java.util.Date;

import com.oreilly.servlet.multipart.FileRenamePolicy;

public class RandomFileRenamePolicy implements FileRenamePolicy {

	public File rename(File file) {
	  String body="";
      String ext="";
      Date date = new Date();
      int pot=file.getName().lastIndexOf(".");
      if(pot!=-1){
          body= date.getTime() +"";
          ext=file.getName().substring(pot);
      }else{
          body=(new Date()).getTime()+"";
          ext="";
      }
      String newName=body+ext;
      file=new File(file.getParent(),newName);
      return file;

	}

}
posted @ 2009-06-17 15:55  樊凯  阅读(10800)  评论(4编辑  收藏  举报