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

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

欢迎大家转发收藏。


之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传指的是用户一次性可以选择多个文件,然后上传是将所有选取的文件上传到服务器。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,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("<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_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); 

  })

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359

推荐阅读更多精彩内容