zoukankan      html  css  js  c++  java
  • [Pulgin] 利用swfupload实现java文件批量上传

    URL:http://blog.csdn.net/xuweilinjijis/article/details/8876305

    之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传指的是 用户一次性可以选择多个文件,然后上传是将所有选取的文件上传到服务器。java中真正可以实现批量上传的技术大致有两种:一种是通过flash;一种是 通过applet;不过html5也可以支持批量拖选。两种方式有各自的优缺点,其中flash对于浏览器兼容性较好,基本可以满足市面上大众浏览器,缺 点就是对于上传文件大小有限制,如果用户只需要上传一些图片或者文档文件的话,这种选择还是比较理想的;applet方式可以上传大文件,但是需要浏览器 支持jdk并安装相关插件。

          今天这个项目采用的是flash方式。整体设计思路:采用ext+swfupload进行上传界面显示,后台采用strust2来处理上传文件。



    最终项目运行效果图如下:


    前台jsp文件源码index.jsp:

    <%@ page contentType="text/html;charset=gb2312" language="java"%>  
    <html>  
        <head>  
            <title>swf 上传</title>  
            <link rel="stylesheet" type="text/css"  
                href="js/css/ext-all.css" />  
              
        </head>  
      
          
          
    <body>  
     <script  type="text/javascript" src="js/ext-base.js"></script>  
     <script  type="text/javascript" src="js/ext-all.js"></script>  
     <script src="swf/swfupload.js" type="text/javascript"></script>  
     <script src="swf/swfupload.speed.js" type="text/javascript"></script>  
     <script src="swf/mode.js" type="text/javascript"></script>  
     <script src="swf/handlers.js" type="text/javascript"></script>   
        <script type="text/javascript" src="js/prototype/prototype.js"></script>  
        <script type="text/javascript" src="js/bramus/jsProgressBarHandler.js"></script>  
     <script  type="text/javascript">  
    // 允许上传文件的全部大小  
    var limtallsize=50000000;  
      
      function UploadGrid()  
      {    
             var mine=this;       
             var states=[{v:-1,t:'等待'},{v:0,t:'就绪'},{v:1,t:'上传中'},{v:2,t:'停止'},{v:3,t:'成功'},{v:4,t:'失败'}];    
             function  statesRender(v)  
             {  
                for(var i=0;i<states.length ;i++)  
                {  
                   if(states[i].v==v)  
                   {  
                     return states[i].t;  
                   }  
                }  
             }  
             function rateRender(value, metaData, record, rowIndex, cellIndex, store)  
             {  
                v=value?value:0;  
                //return "<table border='0' cellpadding='0' cellspacing='0' width='100%' height='100%'><tr><td bgcolor='#0000FF' height='100%' align='center' width='"+v+"%'><font color='white'>"+v+"%</font></td><td></td></tr></table>";  
                //setProgress(v);  
                return "<span id="element6_"+record.data.id+"" rate=""+v+""></span>";  
             }  
                     
             var rn=new Ext.grid.RowNumberer();  
             var sm = new Ext.grid.CheckboxSelectionModel({singleSelect:false});                       
             var cm = new Ext.grid.ColumnModel([      
                rn,  
                sm,   
                {header:'文件名称',dataIndex:'fileName',menuDisabled:true, 100},  
                {header:'大小'   ,dataIndex:'fileSize',menuDisabled:true, 100},  
                {header:'进度'   ,dataIndex:'rate',menuDisabled:true, 180,renderer:rateRender},  
                {header:'速度'   ,dataIndex:'speed',menuDisabled:true},  
                {header:'状态'   ,dataIndex:'state',menuDisabled:true,renderer:statesRender}  
               ]);      
      
                this.ds = new Ext.data.Store({          
                proxy: new Ext.data.HttpProxy({url:'test!query.action',method:'post'}),  
                remoteSort:false,  
                reader: new Ext.data.JsonReader(  
                {totalProperty:'records',root:'root'},         
                [  
                {name: 'id'},  
                {name: 'fileName'},  
                {name: 'code'},  
                {name: 'fileSize'},  
                {name: 'rate'},  
                {name: 'speed'},  
                {name: 'state'}  
                ])   
                  
            });    
              
            var RC=Ext.data.Record.create([  
                     {name: 'id', mapping: 'id'},  
                     {name: 'code', mapping: 'code'},  
                     {name: 'fileName', mapping: 'fileName'},  
                     {name: 'fileSize', mapping: 'fileSize'},  
                     {name: 'rate', mapping: 'rate'},  
                     {name: 'speed', mapping: 'speed'}  
                     ]);         
              
            this.grid = new Ext.grid.GridPanel({        
              
            ds: mine.ds,  
            cm: cm,  
            sm: sm,   
            anchor:'100%',  
            loadMask:{msg:'数据加载中...'},  
            viewConfig:{forceFit:true},  
            height:300,   
            width :600,  
            tbar:[{id:'spanSWFUploadButton',text:'-'},'-'],    
            listeners:{  
              render:function()  
              {  
                // ytb-sep  
                var cmp=Ext.getCmp("spanSWFUploadButton");  
                var pcont=cmp.getEl().parent();          
                pcont.update("<span id='spanSWFUploadButton' class='blank'></span>");  
                var swfu = new SWFUpload({  
                    upload_url : "upload.action",  
                    post_params : {  
                        "god" : "god","uid" : "u"  
                    },  
      
                    flash_url : "swf/swfupload.swf",  
                    button_placeholder_id : "spanSWFUploadButton",  
                    button_image_url : "swf/bt.png",  
                    button_text_right_padding : 100,                  
                    button_ 61,  
                    button_height : 22,  
                      
                    button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,  
                    // handler here   
                    swfupload_loaded_handler : Handlers.swfUploadLoaded,                  
                    file_queued_handler : Handlers.fileQueued,  
                    file_queue_error_handler : Handlers.fileQueueError,   
                    upload_progress_handler : Handlers.uploadProgress,  
                    upload_error_handler : Handlers.uploadError,  
                    upload_success_handler : Handlers.uploadSuccess               
                });  
                swfu.grid=mine.grid;  
                swfu.ds=mine.ds;  
                swfu.RC=RC;           
            }  
          }   
          });   
            
      }  
      
      Ext.onReady(function(){    
           Ext.QuickTips.init();  
           Ext.form.Field.prototype.msgTarget = 'side';  
           Ext.BLANK_IMAGE_URL ='../../images/s.gif';  
           var grid=new UploadGrid();  
           var  win = new Ext.Window({  
                    title:'上传表格测试',  
                    el:'panel',  
                    620,  
                    height:350,  
                    closeAction:'hide',//关闭窗口时渐渐缩小  
                    plain: true,  
                     
                    items:[grid.grid],  
       
                    buttons: [{  
                        text:'Submit',  
                        disabled:true  
                    },{  
                        text: 'Close',  
                        handler: function(){  
                            win.hide();  
                        }  
                    }]  
                });  
             win.show(this);     
      })               
     </script>  
     <div id="panel"></div>   
    </body>  
    </html>

    后台UploadAction.java:

        package upload.action;  
          
        import java.io.File;  
        import java.text.DateFormat;  
        import java.text.SimpleDateFormat;  
        import java.util.Date;  
        import org.apache.struts2.ServletActionContext;  
          
        public class UploadAction  
        {  
            private File Filedata;  
          
            private String FiledataFileName;  
          
            private String FiledataContentType;  
          
            // 文件夹目录  
            private static final String basePath = "fileupload\groupResource";  
          
            public String execute()  
            {  
                  
                String s = (String)ServletActionContext.getRequest().getParameter("god");  
                String s2 = (String)ServletActionContext.getRequest().getParameter("uid");  
                if (Filedata != null && Filedata.length() > 0)  
                {  
                    // 群组名字作为最后的文件夹  
                    String groupFileName = "haoba";  
                      
                    String uploadPath = ServletActionContext.getServletContext()  
                            .getRealPath(basePath+"\"+groupFileName);  
                    File path = new File(uploadPath);  
                      
                    if (!path.exists())  
                    {  
                        path.mkdirs();  
                    }else{  
                        //文件已存在  
                        //FiledataFileName   
                    }  
                      
                    String newPath = uploadPath +"\"+FiledataFileName;  
                    Filedata.renameTo(new File(newPath));  
                     
                    // 保存到数据库中的路径  
                    String savePath = basePath+"\"+groupFileName+"\"+FiledataFileName;  
                      
                }  
          
                return null;  
            }  
          
            // 上传文件  
            private String pathSplit(String timeStr, String o, String n)  
            {  
                StringBuffer sb = new StringBuffer();  
                for (String a : timeStr.split(o))  
                {  
                    sb.append(a);  
                    sb.append(n);  
                }  
                sb.deleteCharAt(sb.length() - 1);  
                return sb.toString();  
            }  
          
            public static String format(Date date, String parttern)  
            {  
                DateFormat df = new SimpleDateFormat(parttern);  
                return df.format(date);  
            }      
              
            public File getFiledata()  
            {  
                return Filedata;  
            }  
          
            public void setFiledata(File filedata)  
            {  
                Filedata = filedata;  
            }  
          
            public String getFiledataFileName()  
            {  
                return FiledataFileName;  
            }  
          
            public void setFiledataFileName(String filedataFileName)  
            {  
                FiledataFileName = filedataFileName;  
            }  
          
            public String getFiledataContentType()  
            {  
                return FiledataContentType;  
            }  
          
            public void setFiledataContentType(String filedataContentType)  
            {  
                FiledataContentType = filedataContentType;  
            }  
              
            public static void main(String[] args) {  
                System.out.println(0.444<1);  
            }  
        }  

    源码免费下载地址:http://dl.vmall.com/c0lmx5394j

    swfupload控件使用指南:http://dl.vmall.com/c0s0bbqp5i

    --------------------------------------

    欢迎您,进入 我系程序猿 的cnBlog博客。

    你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

    You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

    --------------------------------------

    分享到QQ空间  

  • 相关阅读:
    lucene4 Filter
    lucene Query
    MyEclipse 中各种 libraries 的含义
    CRF++使用小结
    链表的输入与输出

    数据结构队列的各种操作
    设置背景颜色
    JavaScript由单价、数量计算总价
    中文和拼音自动转换的输入框
  • 原文地址:https://www.cnblogs.com/jqmtony/p/4148983.html
Copyright © 2011-2022 走看看