Jquery_Uploadify3.2与Struts2结合学习笔记

1、 下载到官方网址下载“uploadify3.2”插件。

2、 下载swfobject_2_2js插件

3、 搭建struts2框架。

4、 创建upload2.jsp页面,内容如下:

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

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

   

    <title>Jquery插件上传</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <link rel="stylesheet" type="text/css" href="js/uploadify/uploadify.css">

    <script type="text/javascript" src="js/uploadify/jquery-1.7.2.min.js"></script>

    <script type="text/javascript" src="js/uploadify/swfobject.js"></script>

    <script type="text/javascript" src="js/uploadify/uploadify.js"></script>

    <script type="text/javascript" src="js/uploadify/uploadify.min.js"></script>

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css">

    -->

    <script type="text/javascript">

             $(function() {

              $("#file_upload").uploadify({

                  debug:false,

                  auto:true,//是否自动上传

                  height: 30,  

                  buttonText:'上传文件',

                  cancelImage:'js/uploadify/uploadify-cancel.png',

                  swf : 'js/uploadify/uploadify.swf',

                  expressInstall:'js/uploadify/expressInstall.swf',

                  uploader : '<%=path%>/upload/fileUpload.action', //后台处理上传文件的action 

                  width  : 120 ,

                  multi:false,//是否允许多个文件上传

                  queueID:'uploadfileQueue',

                  fileObjName:'fileName', //与后台Action中file属性一样

                  formData:{ //附带值       

                                'userid':'111',

                                'username':'tom', 

                                'rnd':'111'

                                },

                   successTimeout:99999,//上传超时时间

                   overrideEvents:['onDialogClose'],

                  fileTypeDesc:'上传文件支持的文件格式:jpg,jpge,gif,png',

                  fileTypeExts:'*.*',//*.jpg;*.jpge;*.gif;*.png

                  queueSizeLimit : 3,//

                 // simUploadLimit:1,//一次可以上传1个文件

                  fileSizeLimit:'20MB',//上传文件最大值

                  //返回一个错误,选择文件的时候触发

                    onSelectError:function(file, errorCode, errorMsg){

                          switch(errorCode) {

                              case -100:

                                  alert("上传的文件数量已经超出系统限制的"+$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!");

                                  break;

                              case -110:

                                  alert("文件 ["+file.name+"] 大小超出系统限制的"+$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!");

                                  break;

                              case -120:

                                  alert("文件 ["+file.name+"] 大小异常!");

                                  break;

                              case -130:

                                  alert("文件 ["+file.name+"] 类型不正确!");

                                  break;

                          }

                      },

                       //每次更新上载的文件的进展

                      onUploadProgress: function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal) {

                      //alert(bytesUploaded);

                           //有时候上传进度什么想自己个性化控制,可以利用这个方法

                           //使用方法见官方说明

                      },

                       //检测FLASH失败调用

                       onFallback:function(){

                          alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。");

                      },

                      //上传到服务器,服务器返回相应信息到data里

                     onUploadSuccess:function(file, data, response){

                      var fileNameAndPath=data.split(",");

                      var phtml="<p><a href='#' onlick=downLoad('"+fileNameAndPath[1]+"')>"+fileNameAndPath[0]+"</a><img alt='删除' src='js/uploadify/uploadify-cancel.png' onclick=delFile(this)></p>";

                      if($("#uploadfileQueue p").length==0){

                           $("#uploadfileQueue").html(phtml);

                      }else{

                           $("#uploadfileQueue p:last").after(phtml);

                      }

                          //alert(data+"上传成功");

                      },

                     onSelect : function(file) {

                       //alert(file.name);         

                      },

                      removeCompleted:true,//上传的文件进度条是否消失

                      requeueErrors:false,

                      removeTimeout:2,//进度条消失的时间,默认为3

                      progressData:"percentage",//显示上传的百分比

                       onUploadError : function(file,errorCode,errorMsg,errorString,swfuploadifyQueue) {  

                         $("#dialog-message").html(errorString);  

                         } , 

                      onError:function(event, queueID, fileObj){

                       alert("文件:" + fileObj.name + " 上传失败"); 

                      }

             });

            });

             //删除文件

             function delFile(obj){

             $(obj).parent().remove();

             }

        </script>

  </head>

  <body>

    <input type="file" id="file_upload"  name="fileName">

    <div  id="uploadfileQueue" style="width: 400px;">

   

    </div>

   

  </body>

</html>

5、 创建处理上传文件FileUploadAction.java,内容如下:

  /**  

 * @title FileUploadAction.java

 * @package com.ys.uploadfile.action

 * @description 文件描述

 * @author lijf 

 * @update 2012-12-13 下午04:17:35

 * @version V1.0  

 */

package com.ys.uploadfile.action;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.nio.charset.Charset;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport implements ServletRequestAware {

    /**

     * @fields serialVersionUID

     */

    private static final long serialVersionUID = 1L;

    private HttpServletRequest request; 

    private List<File> fileName;//这里的"fileName"一定要与表单中的文件域名相同  

    private List<String> fileNameContentType;//格式同上"fileName"+ContentType  

    private List<String> fileNameFileName;//格式同上"fileName"+FileName  

    private String savePath;//文件上传后保存的路径

    /**

     *

     * @return

     * @throws Exception

     * @author lijf 

     * @description 上传文件

     * @update 2013-1-26 下午02:15:26

     */

    public void upload() throws Exception {//intentionPicture

       String uploadFilename="";

       File dir=new File(getSavePath()); 

       String savePath=getSavePath();//保存上传文件的地址

       if(!dir.exists()){ 

           dir.mkdirs(); 

       } 

       List<File> files=getFileName(); 

       for(int i=0;i<files.size();i++){ 

           FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getFileNameFileName().get(i)); 

           FileInputStream fis=new FileInputStream(getFileName().get(i)); 

           byte []buffers=new byte[1024]; 

           int len=0; 

           while((len=fis.read(buffers))!=-1){ 

              fos.write(buffers,0,len); 

           } 

           fos.close();

           fis.close();

           uploadFileName=getFileNameFileName().get(i);

       } 

       //设置响应内容的字符串编码

       ServletActionContext.getResponse().setCharacterEncoding("UTF-8");

       ServletActionContext.getResponse().setContentType("text/plain");

        ServletActionContext.getResponse().getWriter().print(uploadFileName+","+savePath+"\\"+uploadFileName);

    }

   

   

    /* (non-Javadoc)下载文件

     * @see com.opensymphony.xwork2.ActionSupport#execute()

     */

    @Override

    public String execute() throws Exception {

       // TODO Auto-generated method stub

       return "success";

    }

       public InputStream getInputStream() {

           return ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);

       }

    /* (non-Javadoc)

     * @see org.apache.struts2.interceptor.ServletRequestAware#setServletRequest(javax.servlet.http.HttpServletRequest)

     */

    public void setServletRequest(HttpServletRequest req) {

       this.request=req;

    }

    public List<File> getFileName() {

       return fileName;

    }

    public void setFileName(List<File> fileName) {

       this.fileName = fileName;

    }

    public List<String> getFileNameContentType() {

       return fileNameContentType;

    }

    public void setFileNameContentType(List<String> fileNameContentType) {

       this.fileNameContentType = fileNameContentType;

    }

    public List<String> getFileNameFileName() {

       return fileNameFileName;

    }

    public void setFileNameFileName(List<String> fileNameFileName) {

       this.fileNameFileName = fileNameFileName;

    }

    @SuppressWarnings("deprecation")

    public String getSavePath() {

       return request.getRealPath(savePath); 

    }

    public void setSavePath(String savePath) {

       this.savePath = savePath;

    }

}

6、 struts2.xml配置内容如下

  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

   

    <!-- 上传文件的action -->

    <constant name="struts.multipart.maxSize" value="1024000000"/> 

    <package name="upload" namespace="/upload" extends="struts-default">

       <action name="fileUpload" class="com.ys.uploadfile.action.FileUploadAction" method="upload">

           <param name="savePath">/uploads</param> 

       </action>

      

    </package>

</struts>

注:uploadify的属性配置请参考附件

相关推荐