利用Ext.ux.UploadDialog异步实现多文件上传

 1、先看看效果:

 

 


接下来详细说说怎么用它:java实现

 

2、需要的组件:Ext.ux.UploadDialog.js

官网下载地址:http://www.max-bazhenov.com/dev/upload-dialog-2.0/index.php

下载解压后把整个的拷到web工程下面,例如我放在:WebRoot/comm/extjs/UploadDialog下面

 

3、接下来在你的jsp里面引入需要的文件:

<link rel="stylesheet" type="text/css" href="comm/extjs/UploadDialog/css/Ext.ux.UploadDialog.css" />
<script type="text/javascript" src="comm/extjs/UploadDialog/Ext.ux.UploadDialog.js"></script>
<script type="text/javascript" src="comm/extjs/UploadDialog/locale/ru.utf-8_zh.js"></script>

 

其中上面引入的第三个js文件是我改过了的,用来做汉化的,包里面自己带的文件叫   ru.utf-8.js ;

这里也把这个文件贴上上来把,可以直接copy它:

//ru.utf-8_zh.js 

Ext.apply(
Ext.ux.UploadDialog.Dialog.prototype.i18n,
{
    title: '上传头像',
    state_col_title: '状态',
    state_col_width: 70,
    filename_col_title: '文件名',
    filename_col_width: 230,
    note_col_title: '备注',
    note_col_width: 150,
    add_btn_text: '添加',
    add_btn_tip: '添加文件到上传列表',
    remove_btn_text: '删除',
    remove_btn_tip: '从上传列表中上传文件',
    reset_btn_text: '重置',
    reset_btn_tip: '重置文件上传列表',
    upload_btn_start_text: '开始上传',
    upload_btn_stop_text: '停止上传',
    upload_btn_start_tip: '开始上传',
    upload_btn_stop_tip: '停止上传',
    close_btn_text: '关闭',
    close_btn_tip: '关闭上传窗口',
    progress_waiting_text: '等待……',
    progress_uploading_text: '正在上传: {0} / {1} 上传成功',
    error_msgbox_title: '错误信息',
    permitted_extensions_join_str: ',',
    err_file_type_not_permitted: '文件类型错误: 只可以上传{1}',
    note_queued_to_upload: '等待上传',
    note_processing: '上传中……',
    note_upload_failed: '上传失败',
    note_upload_success: '上传成功',
    note_upload_error: '上传出错',
    note_aborted: '忽略',
    note_canceled: '取消'
}
);

 
 
 

4、jsp里面调用

jsp:

 

<html>

<head>

</head>

<body>

<img id="upload_image_btn" src="/bbs/images/upload_image.png" mce_src="bbs/images/upload_image.png" style="cursor: pointer;" mce_style="cursor: pointer;">

</body>

</html>

 

 

js:

//创建上传组件
   $('#upload_image_btn').click(function() 
    { 
       dialog = new Ext.ux.UploadDialog.Dialog({ 
             title: '上传头像' , 
             url:'system/upload-uploadImage.action' , //这里我用struts2做后台处理
             post_var_name:'uploadFiles',//这里是自己定义的,默认的名字叫file
             width : 450, 
             height : 300, 
             minWidth : 450, 
             minHeight : 300, 
             draggable : true , 
             resizable : true , 
              //autoCreate: true,    
             constraintoviewport: true , 
             permitted_extensions:[ 'JPG' , 'jpg' , 'jpeg' , 'JPEG' , 'GIF' , 'gif' , 'png' , 'PNG' ],    
             modal: true , 
              reset_on_hide: false , 
             allow_close_on_upload: false ,    //关闭上传窗口是否仍然上传文件 
//            upload_autostart: true     //是否自动上传文件 
             upload_autostart: false
       }); 
            
       dialog.show(); //'show-button' 
       dialog.on( 'uploadsuccess' , onUploadSuccess); //定义上传成功回调函数
       dialog.on( 'uploadfailed' , onUploadFailed); //定义上传失败回调函数

       dialog.on( 'uploaderror' , onUploadFailed); //定义上传出错回调函数

       dialog.on( 'uploadcomplete' , onUploadComplete); //定义上传完成回调函数

    });
   
    //文件上传成功后的回调函数
    onUploadSuccess = function(dialog, filename, resp_data, record){
        alert(resp_data.data);//resp_data是json格式的数据
    }
    
    //文件上传失败后的回调函数
    onUploadFailed = function(dialog, filename, resp_data, record){
        alert(resp_data.data);
    }
    
    //文件上传完成后的回调函数
    onUploadComplete = function(dialog){

       alert('所有文件上传完成');
//    dialog.hide();
     }

  

说明:

这里多文件上传其实不是一次性把多个文件传到后台,其实也是一次一个文件,只不过它把这个过程连续起来进行了而已,所以上面的那个//文件上传成功后的回调函数//执行的次数是跟上传的文件数目相同的;而//文件上传完成后的回调函数//是当列表中所有的都完成后执行一次

5、java后台部分

后台得到文件的时候,要根据前面定义的 post_var_name来取文件,

public class UploadAction extends BaseActionSupport {   
  
    private static final long serialVersionUID = 4795147622620740907L;   
  
    /**  
     * UserService引用  
     */  
    private UserService service;   
  
    private File[] uploadFiles;   
       
    private String[] uploadFileNames;   
       
    private String[] uploadContentTypes;   
       
    public File[] getUploadFiles() {   
        return uploadFiles;   
    }   
  
    public void setUploadFiles(File[] uploadFiles) {   
        this.uploadFiles = uploadFiles;   
    }   
  
    public String[] getUploadFileNames() {   
        return uploadFileNames;   
    }   
  
    public void setUploadFileNames(String[] uploadFileNames) {   
        this.uploadFileNames = uploadFileNames;   
    }   
  
    public String[] getUploadContentTypes() {   
        return uploadContentTypes;   
    }   
  
    public void setUploadContentTypes(String[] uploadContentTypes) {   
        this.uploadContentTypes = uploadContentTypes;   
    }   
  
  
    /**  
     * 上传照片  
     */  
    public void uploadImage() {   
        LogUtil.info("上传用户头像开始");   
        UserVO tempVO = (UserVO) session.getAttribute(Constants.USER_KEY);   
        if(tempVO!=null){   
//          图片上传后存放的路径目录    
            String fileBasePath = session.getServletContext().getRealPath("/");   
            File images = new File(fileBasePath+"/images/user_images/"+tempVO.getId()+"/");      
            if(!images.exists()){      
                images.mkdirs();      
            }    
            BufferedInputStream bis = null;   
            BufferedOutputStream bos = null;   
            for(int i = 0,size = uploadFiles.length;i<size;i++){   
                File file = uploadFiles[i];   
                try {   
                    bis = new BufferedInputStream(new FileInputStream(file));   
                    String imageName  = tempVO.getId()+new Date().getTime()+".png";   
                    //   
                    bos = new BufferedOutputStream(         
                            new FileOutputStream(new File(images.getPath()+"/"+imageName)));   
                    Streams.copy(bis, bos, true);   
                     writeJson("images/user_images/"+tempVO.getId()+"/"+imageName,true);   
                } catch (Exception e) {   
                    writeJson("上传失败:系统发生错误,请与管理员联系", false);   
                    e.printStackTrace();   
                }       
            }   
        }else{   
            writeJson("上传失败:您已经退出了登录", false);   
        }   
        isInvalid();   
        LogUtil.info("上传用户头像结束");   
    }   
  
    /**  
     * 取得service引用  
     * @return  
     */  
    public UserService getService() {   
        return service;   
    }   
  
    /**  
     * 设置service引用  
     *   
     * @param service  
     */  
    public void setService(UserService service) {   
        this.service = service;   
    }   
}  

 

 

 

《跨界杂谈》华为印象(五):高度集权的矩阵式架构 高度集权的矩阵式架构 “高度集权的矩阵式架构”不是官方术语。是笔者的一位同事非常经典的总结。解释这个句话还是有点困难的,笔者入职华为三年也没彻底搞明白,在这里只能尝试性的解释一下。 矩阵 我们先看一下“矩阵”。华为有两套部门职能体系,华为内部术语,叫实线部门和虚线部门。由实线与虚线部门交叉构成矩阵。大部分(但不是所有)华为员工都由两个部门(两个领导)进行管理。对员工而言,所谓的实线部 阅读详情

相关推荐

T507 buildroot linux4.9之RLT8211F 1000M以太网开发调试

调试T507的gmac,解决该RTL8211F 1000m以太网中调试遇到的问题

目前从事linux驱动开发,多交流多学习吧 670

el-upload上传图片,限制上传数量,超过最大数量则不展示上传组件,可点击删除

el-upload限制数量上传图片,可删除

m0_56135996的博客 9603

把开源 Skills 集成到 LangGraph 项目

1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。

lpfasd123的博客 839

发一个ExtJS(2.2)上传插件Ext.ux.UploadDialog.js

这个插件是从《恒润基合同管理系统 1.5 免费版》版本看到的,觉的好用就给挖下来了。 破解js代码还小费了一番功夫,js代码先加密成16制代码,又使用其他加密工具加密的。解密后发现变量都变成a,b,c,d,e 看起来累啊!   我因为使用的是 CooliteToolkit  所以不需要手动添加Extjs文件,大家自己添加上吧。 程序运行 index.aspx  (不会用CooliteT

chy2z的专栏 506

利用Ext.ux.UploadDialog实现异步多文件上传

利用Ext.ux.UploadDialog实现异步多文件上传 1、先看看效果: 接下来详细说说怎么用它:java实现 2、需要的组件:Ext.ux.UploadDialog.js 官网下载地址:http://www.max-bazhenov.com/dev/upload-dialog-2.0/index.php 下载解压后把整个的拷到web工程下面,例如我放在:WebRoo...

caodaoxi的专栏 237

ext中引用ux_【原创】[Ext.ux.UploadDialog] 控件使用说明及在Ext 3.x下问题解决

[Ext.ux.UploadDialog]是基于ExtJS2.0开发的文件上传控件。一. 控件说明:该控件由以下几个对象组成:Ext.ux.Utils.EventQueue: 通用事件处理器,对象内置一个事件队列,调用其process函数即可对队列中待处理事件进行响应处理。控件内部将上传文件过程定义成事件数组,从而在上传过程中特定的阶段触发某事件进入下一步的处理。该对象即完成针对上传过程的特定阶段...

weixin_35504293的博客 381

Ext.ux.UploadDialog的使用经验

由于近段时间产品中需要加上上传组件,之前考虑过jQuery,但是现有项目是用ext完成的。所以使用了 Ext.ux.UploadDialog进行实现,遇到的第一个问题就是该Ext组件是批量上传组件,但是产品中只允许单个上传,通过对 源码的查看,发觉只要在添加文件时进行过滤就可以了。过滤代码如下:     //定义文件添加事件 dialog.on('fileadd', f...

sunofsummer的专栏 475

【原创】[Ext.ux.UploadDialog] 控件使用说明及在Ext 3.x下问题解决

[Ext.ux.UploadDialog]是基于ExtJS2.0开发的文件上传控件。 一. 控件说明:该控件由以下几个对象组成: Ext.ux.Utils.EventQueue: 通用事件处理器,对象内置一个事件队列,调用其process函数即可对队列中待处理事件进行响应处理。控件内部将上传文件过程定义成事件数组,从而在上传过程中特定的阶段触发某事件进入下一步的处理。该对象即完成针对上传...

weixin_30315435的博客 216

分离图片上传与表单提交实现异步无刷新上传图片机制

最近工程里总是遇到这种表单里面带上传图片的,这里最初的做法是提供一个“file”标签,选择图片后也没有任何提示,最后点击提交按钮保存到后台,这样做有个十分明显的缺点,表单提交需要刷新界面,假如我框架里面默认显示的是界面A,而在界面B里做上传图片的操作,一旦进行这项操作会跳转到A界面这种大大降低用户体验。所以这里必须使用无刷新的机制实现,但这里又有个难题,我们知道ajax是无法实现文件上传...

weixin_30477797的博客 202

ExtJS FormPanel上传

ExtJS上传组件中FormPanel能很方便的实现上传。再项目中对单个文件上传实践起来比较的简单 下面是我用这个控件的部分提起出来的部分代码: &lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt; &lt;% String path = request.getContextPath(); S...

一个安静的程序员 435

jquery uploadify插件多文件上传

     效果图: 1、jquery uploadify 下载:http://www.uploadify.com/   2、安装:解压后拷贝的工程目录下面,如:WebRoot/uploaddify   3、配置项说明:        uploader: uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框,默认值:uploa...

给太阳洒水的博客 713

JTextArea自动滚动到最低端

…… jScrollPane = new JScrollPane(infoArea); …… //自动滚动方法 public void scrollToView(){ if(jScrollPane != null &amp;&amp; infoArea != null){ Point p = new Point(); ...

给太阳洒水的博客 421

Java 写注册表

这里介绍的是利用registry向windows系统写注册表的过程: 首先下载registry,我这里用的是registry-3.1.3.zip,解压后在bin目录下会有两个必须的文件: 1、registry.jar, 2、ICE_JNIRegistry.dll(动态链接库文件), 把.jar文件放到lib下面,至于.dll文件就看你的配置情况了,一般的情况下,如果是非WEB工程,...

给太阳洒水的博客 339

BufferedReader 和BufferedWriter 实例

/** * 文件处理工具类 * @author samLee * */ public class FileUtil { private static FileReader fr = null; private static BufferedReader bf = null; private static FileWriter fw = null; priva...

给太阳洒水的博客 261

IP地址查询接口收集

新浪 IP 地址查询接口:http://counter.sina.com.cn/ip?ip=139.256.0.9接口形式:http;返回内容:javascript 片段;查询地址:可以指定 IP 地址;有道 IP 地址查询接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&amp;q=IP地址接口形式:http;返回内容:xml 片...

给太阳洒水的博客 248

java socket 多线程实例

 题: 做一个简单的网络控制软件,分为Server端和Client端,Server段填入一个有效的端口然后监听,Client端填入Server端的地址和端口号然后连接,连接以后双方可通信。 要求: (server绑定端口大于9000,用单独的Server类和单独的Client类封装SocketServer和Socket )                当Client端发送命令start 到...

给太阳洒水的博客 171

C3P0 配置详细说明

&lt;c3p0-config&gt;&lt;default-config&gt;&lt;!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --&gt;&lt;property name="acquireIncrement"&gt;3&lt;/property&gt;&lt;!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --&gt

给太阳洒水的博客 161

Java 发送邮件

/** * 邮件工具 */ package test; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; import javax.mail....

给太阳洒水的博客 161

基于粒子群算法的配电网重构优化:降低有功网损的MATLAB实现及应用

基于粒子群算法的配电网重构优化方法,旨在降低有功网损。文中采用了前推回代法进行潮流计算,并以IEEE33节点模型为基础,展示了完整的MATLAB程序实现及其输出结果。主要内容包括粒子群算法的基本原理、粒子编码设计、适应度函数的构建、改进的速度更新公式以及结果可视化模块。此外,文章还讨论了分布式电源对配电网的影响,并通过实验验证了算法的有效性和优越性。适合人群:从事电力系统研究、智能电网优化、配电自动化等相关领域的研究人员和技术人员。使用场景及目标:适用于需要优化配电网结构以降低能耗的研究项目或工程实践中。目标是通过合理的开关操作,使配电网达到最小的有功网损,提高供电可靠性和效率。其他说明:尽管该算法在IEEE33节点测试系统上表现出色,但在实际应用中还需考虑更多复杂因素,如分布式电源的波动性、三相不平衡等问题。

oppo reno ace刷写第三方rec资源+步骤 实测支持安卓多版本

oppo reno ace刷写第三方rec资源+步骤 实测支持安卓多版本1----请使用本人实测的资源来刷写你的机型2----资源可以支持不同安卓版本刷写第三方rec3-----内含刷写资源和详细刷写教程步骤4-----完美兼容当前此安卓不同的版本刷写5-----资源真机实测多次。完美中文支持多语言6-----第三方rec内高级选项里选项设置多样 获取root权限等等7----支持自动解密data分区,刷写无bug教程参考:https://blog.csdn.net/u011283906/article/details/125402978?spm=1001.2014.3001.5501

上一篇: Servlet 中java路径的直观表示
下一篇: BufferedReader 和BufferedWriter 实例
iteye_11961
博客等级 码龄8年 1粉丝 64原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值