公司需要把以前的Struts2自带的图片上传替换掉,因为不能一个file选择多个文件,本人直接百度搜索图片插件,  貌似就它(uploadify3.2.1)在最前面,也找过很多案例, 其中有不少问题,好了直接代码

1、导入插件(我这里用的是uploadify3.2.1)

把uploadify3.2.1放在webroot下面,如图:(在页面引入插件的js和css我就不贴图了)

2、初始化插件

html:

<div class="picOP">
<form action="<%=basePath %>mng/saveProductPicture.do" id="uploadForm" method="post" enctype="multipart/form-data">
<input id="inputPicFile" name="inputPicFile" type="file"/>
<span id="fileSize">已选择0个文件</span>
<input type="button" class="btn btn-default" value="上传">
<div style="display: none" id="fileOkMSgDiv" class="form-group">
<span id="fileOk"></span>
</div>
</form>
</div>

js:这里是初始化插件

$(function(){
$("#inputPicFile").uploadify({
'debug' : false, //开启调试
'auto' : false, //是否自动上传
'swf' : '<%=basePath %>uploadify3.2.1/uploadify.swf', //引入uploadify.swf
'uploader' : 'saveProductPicture.do',//请求路径
'formData' : {'uid':$("#pid").val()},
'queueID' : 'fileQueue',//队列id,用来展示上传进度的
'width' : '130', //按钮宽度
'height' : '30', //按钮高度
'queueSizeLimit' : 99, //同时上传文件的个数
'simUploadLimit': 99,
'uploadLimit' : 99,
'fileTypeDesc' : '图片文件(*.jpg;*.gif;*.png)', //可选择文件类型说明
'fileTypeExts' : '*.jpg;*.gif;*.png', //控制可上传文件的扩展名
'multi' : true, //允许多文件上传
'buttonText' : '请选择图片',//按钮上的文字
'fileSizeLimit' : '250KB', //设置单个文件大小限制
'fileObjName' : 'inputPicFile', //<input type="file"/>的name
'method' : 'post',
'removeCompleted' : true,//上传完成后自动删除队列
'onFallback':function(){
alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。");
},
'onUploadSuccess' : function(file, data, response){//单个文件上传成功触发
//data就是action中返回来的数据
},'onQueueComplete' : function(){//所有文件上传完成
$("#fileOkMSgDiv").css("display", "");
$("#fileOk").text("文件上传......OK");
this.queueData.files = [];
fileSizeNum = 0;
isSelectFile = false;
$('#inputPicFile').uploadify('settings', 'buttonText','请选择图片');
$("#fileSize").text("已选择"+fileSizeNum+"个文件");
loadMorePhoto($("#pid").val(), '', '');
},'overrideEvents': ['onSelectError', 'onDialogClose', 'onDialogOpen'] ,//声明被从写的事件
'onDialogOpen':function(){//打开选择文件窗口
fileSizeNum = 0;
isSelectFile = false;
this.queueData.files = [];
$('#inputPicFile').uploadify('settings', 'buttonText','请选择图片');
$("#fileOkMSgDiv").css({display:"none"});
$("#fileSize").text("已选择"+fileSizeNum+"个文件");
$("#fileOk").text("");
},
'onSelectError': function(file, error,errorMsg){//选择错误事件
// debugger;
switch(error){
case -110:
alert("文件["+file.name+"]大小超出系统限制的"+$("#inputPicFile").uploadify('settings', 'fileSizeLimit')+"大小");
break;
case -130:
alert("文件["+file.name+"]类型不对");
break;
};
return false;
},
'onSelect': function(file){//选择图片是触发
// debugger;
if(file){
isSelectFile = true;
fileSizeNum = fileSizeNum+1;
$("#fileSize").css("display", "");
$('#inputPicFile').uploadify('settings', 'buttonText','请点击上传图片');
}
$("#fileSize").text("已选择"+fileSizeNum+"个文件");
},
'onUploadStart': function(file){//上传文件时触发
$('#inputPicFile').uploadify('settings', 'buttonText','玩命上传中,请稍候...');
} });
});

然后想说明一下的是,在初始化的时候插件时只能传递固定的参数,不能等页面加载后用jQuery去获取,传递过去的也是一个null,

传递动态的参数:

//上传图片——这里的代码是在js文件中,上面的初始化是在jsp页面中
var isSelectFile = false;//这个变量使用来判断是否选择图片的
var fileSizeNum = 0;//这个是用来显示选择图片的数量的

$(".picOP input.btn-default").on("click", function(){
if(!isSelectFile){
alert('请选择图片后在上传!');
return;
}
$('#inputPicFile').uploadify('settings','formData',{'uid':$("#pid").val()});//这里是动态传递参数
$('#inputPicFile').uploadify('upload', '*');//上传所有文件
return;
});

Java后台代码:

     public String saveProductPicture(){
System.out.println("进入方法");
String uid = request.getParameter("uid");
try {
if (StringUtils.isNotBlank(uid)) {
String xdPath = sc.getInitParameter("UPLOAD_IMAGE_PRODUCT");
File file = new File(xdPath+"/"+uid);
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
Long l = System.currentTimeMillis();
file = new File(file, l+"");
inputPicFile.renameTo(file); uploadPhotoService.saveUploadPhoto(l, uid, inputPicFileFileName, "1", "product");
response.getWriter().print("success");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}//

目前公司是直接拷贝到服务器上面,没有上传到第三方服务器。

如果你发现传输数据的过程中被Struts2拦截器给拦截了,我当时说的时候我的类型不对,后来我在Struts2的配置文件中发现:

<interceptor-ref name="defaultStack">
<param name="modelDriven.refreshModelBeforeResult">true</param>
<!-- 文件大小 -->
<param name="fileUpload.maximumSize">256000</param>
<!-- 文件扩展名 -->
<param name="fileUpload.allowedExtensions">.jpg,.jpeg,.png,.bmp,.gif</param>
<!-- 文件内容类型 -->
<!-- <param name="fileUpload.allowedTypes">image/jpg,image/jpeg,image/png,image/x-png,image/bmp,image/gif</param> -->
</interceptor-ref>

注释掉文件扩展名或者文件内容类型中的一个即可,该地方还需要优化。

最后,关于uploadify的事件,最好是看看插件的源码, 就明白了。

本人热爱Java相关技术,如有好的文章希望多多推荐推荐,谢谢了~~~

Struts2文件上传--多文件上传(插件uploadify)的更多相关文章

  1. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  2. struts2学习笔记之十:文件上传

    Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖 ...

  3. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  4. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

  5. 文件上传插件Uploadify在Struts2中的应用,完整详细实例

    —>最近由于项目需要使用到一个上传插件,在网上发现uploadify挺不错,所以决定使用它,但是官网文档和例子是php的,而项目是SSI框架的,所以自己对uploadify在struts2中的使 ...

  6. Struts2第六篇【文件上传和下载】

    前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...

  7. struts2一个和多个文件上传及下载

    struts2的文件上传相比我们自己利用第三方jar包(commons-fileupload-1.2.1.jar   commons-io-1.3.2.jar )要简单的多,当然struts2里面也是 ...

  8. Struts2学习(六)———— 文件上传和下载

    一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮 ...

  9. java struts2入门学习实例--使用struts2快速实现多个文件上传

    一.错误提示信息配置 昨天说到更改默认错误配置信息,我测试很多遍,一直都不对.下面贴出来,待以后有好方法了再补充吧. 首先新建一个properties文件,这里命名为testupload.proper ...

随机推荐

  1. 目前调试移动设备程序只能通过USB线缆

    就像iOS,转移(到设备上)并调试App不可能通过WiFi或蓝牙连接. 一个有线的USB线缆连接现今主要用来调试. 确保你直接将Android设备插入Mac的USB接口,避免使用USB hubs和扩展 ...

  2. JSP判断移动设备

    日期: 2014年3月6日 人员::铁锚 看到了一篇很好的文章, <在天猫,前端做什么?>,里面有天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面. jsp ...

  3. mysql进阶(十五) mysql批量删除大量数据

    mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM s ...

  4. 中文注释 MariaDB my.cnf 大型服务器配置模板

    文件如下所示,请根据需要进行修改: 翻译日期: 2014年5月22日 翻译人员: 铁锚 # /usr/share/mysql/my-huge.cnf # MariaDB 配置文件 示例模板(huge, ...

  5. 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号

    每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我 ...

  6. "《算法导论》之‘线性表’":基于静态分配的数组的顺序表

    首先,我们来搞明白几个概念吧(参考自网站数据结构及百度百科). 线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外, ...

  7. 第一个Polymer应用 - (1)创建APP结构

    原文链接: Step 1: Creating the app structure翻译日期: 2014年7月5日翻译人员: 铁锚在本节中,将使用一些预先构建好的Polymer元素来创建基本的应用程序结构 ...

  8. 一个清除Xcode项目占用大量空间的脚本

    如果将Xcode项目的Derived Data保留在每个项目的相对路径里的话,久而久之该文件夹里会占用大量的空间,多达百兆计算. 其中DerivedData中很多文件是Xcode项目编译和执行的缓存, ...

  9. how tomcat works 读书笔记 十一 StandWrapper 下

    StandardWrapperValve StandardWrapperValve是StandardWrapper的基础阀,主要完成了三个工作. 1 调用StandardWrapper的allocat ...

  10. Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能

    博客描述:后台返回地点的经纬度在地图上进行描点,点击导航弹出PopupWindow进行选择地图操作,如果手机中没有安装地图,提示没有,否则传值调起地图进行导航操作 看一下实现的效果,没图说再多都白搭 ...