zoukankan      html  css  js  c++  java
  • 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;
    
    	}
    
    }
  • 相关阅读:
    【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
    【提问解答】2017-10-18--如果你有什么问题,可以分享出来,让我帮你一起解决=_=
    【sublime Text】sublime Text3安装可以使xml格式化的插件
    【IntelliJ IDEA】idea上安装Translation插件后,需要AppKey才能生效的解决方案
    【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
    【sublime Text】关闭sublime的更新提醒和激活提醒
    【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
    【spring boot】4.spring boot配置多环境资源文件
    java多线程断点下载原理(代码实例演示)
    Google Chrome Developer Tools
  • 原文地址:https://www.cnblogs.com/kay/p/1505155.html
Copyright © 2011-2022 走看看