利用swfupload实现java文件批量上传

推荐一个程序员开发、学习的好网站,www.it123.top 

欢迎大家转发收藏。


利用swfupload实现java文件批量上传_第1张图片

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

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

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


利用swfupload实现java文件批量上传_第2张图片

前台jsp文件源码index.jsp:

<%@ page contentType="text/html;charset=gb2312" language="java"%>

swf 上传

href="js/css/ext-all.css" />

// 允许上传文件的全部大小

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

            {

              if(states[i].v==v)

              {

                return states[i].t;

              }

            }

        }

        function rateRender(value, metaData, record, rowIndex, cellIndex, store)

        {

            v=value?value:0;

            //return "

"+v+"%
";

            //setProgress(v);

            return "";

        }


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,width: 100},

{header:'大小'  ,dataIndex:'fileSize',menuDisabled:true,width: 100},

{header:'进度'  ,dataIndex:'rate',menuDisabled:true,width: 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("");

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_width: 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',

                width:620,

                height:350,

                closeAction:'hide',//关闭窗口时渐渐缩小

                plain: true,


                items:[grid.grid],

                buttons: [{

                    text:'Submit',

                    disabled:true

                },{

                    text: 'Close',

                    handler: function(){

                        win.hide();

                    }

                }]

            });

        win.show(this); 

  })

后台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://download.csdn.net/detail/xuweilinjijis/9714277

你可能感兴趣的:(利用swfupload实现java文件批量上传)