JQuery和Struts实现Ajax文件上传
创始人
2024-04-07 03:51:26
0

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

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

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

JSP页面:

  1. <%@ page language="java"  pageEncoding="UTF-8"%> 
  2. <%@ include file="../../common/taglibs.jsp" %> 
  3.  
  4.  
  5.    
  6.     
  7.     
  8.     Ajax文件上传示例 
  9.      
  10.      #loading,ol{  
  11.       font-size:14px;  
  12.       display:none;  
  13.       color:orange;  
  14.       display:none;  
  15.      }  
  16.      ol{  
  17.       display:block;  
  18.      }  
  19.      
  20.   
  21.   $(function(){  
  22.      
  23.    new AjaxUpload("#fileButton",{  
  24.     action:"${basePath}/file.do?method=upload",  
  25.     autoSubmit:true,  
  26.     name:"myfile",  
  27.     onSubmit:function(file, extension){  
  28.      if (extension && /^(pdf|jpg|png|jpeg|gif)$/.test(extension))  
  29.      {  
  30.       $("#loading").html('');  
  31.       $("#loading").show();  
  32.       $("#fileButton").attr("disabled","disabled");  
  33.      }  
  34.      else  
  35.      {  
  36.       $("#loading").html("你所选择的文件不受系统支持");  
  37.       $("#loading").show();  
  38.       return false;  
  39.      }  
  40.     },  
  41.     onComplete:function(file, extension){  
  42.      $("#loading").html("文件上传成功");  
  43.      $("#loading").show();  
  44.      $("#fileButton").removeAttr("disabled");  
  45.     }  
  46.    });  
  47.      
  48.      
  49.    new Ajax_upload('#button3', {  
  50.     action: '${basePath}/file.do?method=upload',  
  51.     name: 'myfile',  
  52.     autoSubmit:true,  
  53.     onComplete : function(file, extension){  
  54.      $('
  55. ').appendTo($('.files')).text(file);  
  56.     }   
  57.    });  
  58.   });  
  59.   
  60.    
  61.     
  62.      
  63.      
  64.     
 
  •     
     
  •      
  •      
  •  
  •    
  •   

    上传成功的文件有:

     
  •    
  •   

     

  •       
  •   

     
  •  
  •   
  •  
  •    
  •  
  • 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;  
  •  
  •  }  
  • 【编辑推荐】

    1. 让DWR和Spring一起工作
    2. 详细介绍Spring框架
    3. Spring 2.0新功能
    4. 如何集成Struts和Spring
    5. Spring对Quartz任务调度提供支持

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
    《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
    2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...