在gxpt_uas系统中,要实现文件(文件和图片等等,可以灵活配置)的批量上传至mongodb,在学习这个过程中,学习了mongodb,并实现了批量上传的功能,实现思路:在DWZ的基础上参考官方的实例结合现有的GXPT来实现,期间看了很多的博客,对于这些框架来说,主要的学习还是应该以文档指导为主,多看官方的手册(即便来说文档很少),多查资料,总的来看,可以说这是DWZ集成过来的插件,主要是js来实现,逐步的体会到了JS厉害,我们对于这些前端框架的学习都是一个道理的(easyui、DWZ、ExtJs等等),只要我们有个学习的思路,一切看似新的内容,我们都可以当成旧的内容学习,知识不同架构而已,学习的思路不变,入门还是很快的,框架确实封装了很多内容,逐步的深入学习吧,切入正题:

引入的文件

前台页面:uploadDuo.jsp

<span style="font-size:18px;">uploaderOption="{

			swf:'${contextPath}/styles/dwz/uploadify/scripts/uploadify.swf',<!-- 加载上传的进度条的文件 -->

			uploader:'${contextPath }/upload/uploadPicAction.action',<!-- 文件提交到后台的action -->

			formData:{PHPSESSID:'xxx', ajax:1},<!-- 对象和额外的数据发送到服务器端上传脚本与每一个文件上传 -->
fileSizeLimit:'200KB',<!-- 限制文件大小 -->
fileTypeDesc:'*.jpg;*.jpeg;*.gif;*.png;',<!-- 限制文件格式 -->
fileTypeExts:'*.jpg;*.jpeg;*.gif;*.png;',<!-- 限制文件类型 -->
fileObjName:'picUp',<!-- 为action中文件的名字一样,这样才能注入进来 --> queueID:'fileQueue', <!-- ile对象的名称用在服务器端脚本 --> buttonImage:'${contextPath}/styles/dwz/uploadify/img/add.jpg',<!-- 按钮图片的加载地址 --> buttonClass:'my-uploadify-button', <!-- 按钮的类型,DWz封装好的类型,执行相应的类型即可 -->
width:102, auto:false<!-- 是否自动上传文件添加到队列中,false不能自动上传,进入队列,true自动上传 -->
}"</span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><!-- 照片集存取位置 -->
<div id="fileQueue" class="fileQueue"></div> <input type="image" src="${contextPath}/styles/dwz/uploadify/img/upload.jpg" onclick="$('#testFileInput2').uploadify('upload', '*');"/>
<input type="image" src="${contextPath}/styles/dwz/uploadify/img/cancel.jpg" onclick="$('#testFileInput2').uploadify('cancel', '*');"/> <div class="divider"></div>
</span></span></span>

处理:UploadPicAction

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">private File picUp;
//文件名字(可以上传文件包含图片等等)
private String picUpFileName;
//文件的类型(struts2框架自带属性)
private String picUpContentType;
//获取文件全信息
public File getPicUp() {
return picUp;
}
//注入文件全信息你
public void setPicUp(File picUp) {
this.picUp = picUp;
} //获取文件名称
public String getPicUpFileName() {
return picUpFileName;
} //注入文件名称
public void setPicUpFileName(String picUpFileName) {
this.picUpFileName = picUpFileName;
}
//获取文件类型
public String getPicUpContentType() {
return picUpContentType;
}
//注入文件类型
public void setPicUpContentType(String picUpContentType) {
this.picUpContentType = picUpContentType;
} /**
* 上传图片
* @MethodName : uploadPic
* @Description : 文件批量上传方法
*/
public void uploadPic(){
try {
// 构造图片属性,key为属性名,value为属性值,属性任意。
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
System.out.println(picUpFileName);
// 存入filename属性,值为uploadFileName
map.put("filename", picUpFileName);
map.put("contentType", picUpContentType);
//实例化MongoEao的对象
MongoUtil mongoEao = new MongoUtil();
//调用后台添加的方法,写入到mongodb数据库中
mongoEao.uploadFile(picUp, picUpFileName+"_new", "gxpt_uas","uasStuPic", map); //在提交form时设置了enctype="multipart/form-data",因此,从request中拿到的ContentType已经变了格式,
//为Content-Type:multipart/form-data; boundary=-------7de6d232f022a,因此在response中重新设置ContentType
System.out.println(request.getContentType());
response.setContentType("text/html;charset=UTF-8");
outMsg(AjaxObject.newOk( CommonConstant.OPETATE_SUCCESS).setCallbackType("").toString());
} catch (Exception e) {
e.printStackTrace();
}
}/**
* 上传图片
* @MethodName : uploadPic
* @Description : 文件批量上传方法
*/
public void uploadPic(){
try {
// 构造图片属性,key为属性名,value为属性值,属性任意。
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
System.out.println(picUpFileName);
// 存入filename属性,值为uploadFileName
map.put("filename", picUpFileName);
map.put("contentType", picUpContentType);
//实例化MongoEao的对象
MongoUtil mongoEao = new MongoUtil();
//调用后台添加的方法,写入到mongodb数据库中
mongoEao.uploadFile(picUp, picUpFileName+"_new", "gxpt_uas","uasStuPic", map); //在提交form时设置了enctype="multipart/form-data",因此,从request中拿到的ContentType已经变了格式,
//为Content-Type:multipart/form-data; boundary=-------7de6d232f022a,因此在response中重新设置ContentType
System.out.println(request.getContentType());
response.setContentType("text/html;charset=UTF-8");
outMsg(AjaxObject.newOk( CommonConstant.OPETATE_SUCCESS).setCallbackType("").toString());
} catch (Exception e) {
e.printStackTrace();
}
}</span></span></span>

struts-studentPic.xml:

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <constant name="struts.multipart.maxSize" value="20971520"/>
<!-- 头像上传管理 --> <package name="uploadMgr" namespace="/upload" extends="default"> <!-- 上传图片begin --> <!--index页链接,跳转到上传页面 -->
<action name="showPicMgrAction" class="uploadPicAction" method="showPicMgr">
<result name="picMgr">/page/uploadify/uploadPic.jsp</result>
</action>
<!--index批量页链接,跳转到上传页面 -->
<action name="showPicMgrPiLiangAction" class="uploadPicAction" method="showPicMgr">
<result name="picMgr">/page/uploadify/uploadDuo.jsp</result>
</action>
<!--index批量页链接,跳转到上传页面 -->
<action name="showPicMgrPiLiangOldAction" class="uploadPicAction" method="showPicMgr">
<result name="picMgr">/page/uploadify/uploadOldDuo.jsp</result>
</action>
<!--上传图片 -->
<action name="uploadPicAction" class="uploadPicAction" method="uploadPic">
</action>
<!--上传图片 -->
<action name="uploadPicOldAction" class="uploadPicAction" method="uploadPicOld">
</action>
<!--查询指定图片,返回图片 -->
<action name="getPicByIdAction" class="uploadPicAction" method="getPicById">
</action> <!--查询所有图片 -->
<action name="showAllPicAction" class="uploadPicAction" method="showAllPic">
<result name="picList">/page/uploadify/fileList.jsp</result>
</action> <!--查询指定图片,返回jsp页面 -->
<action name="showPicByIdAction" class="uploadPicAction" method="showPicById">
<result name="picList">/page/uploadify/fileList.jsp</result>
</action> <!--删除指定图片 -->
<action name="deletePicByIdAction" class="uploadPicAction" method="deletePicById">
</action> <!-- 批量删除图片 -->
<action name="deletePicByIdsAction" class="uploadPicAction" method="deletePicByIds">
</action>
<!--上传图片end --> </package> </struts></span>

spring-studentPic.xml,配置,控制反射注入

<span style="font-size:18px;"><!--上传图片  -->
<bean id="uploadPicAction" class="web.uas.UploadPic.Action.UploadPicAction" scope="prototype" > </bean>
</span>

效果图

文件提交成功

总结

这样的效果来说,还是不错的,很多内容它给封装到了框架里面,对于多文件上传,每一个文件会调用后台的action方法,这个也是其和Struts2的完美组合吧,细心+文档=实现,这部分内容还是需要我们多多的实战,对于框架而言要多用学习到的更多,收获更大.

接触(SSH+Web)框架大概有一个半月了,整体上可以体会到框架解决某一个问题,提供了很好的解决方案,简化了开发者写代码的粒度,我们这时要停下脚步,逐步的思考框架的原理?由来?思想?等等这才是我们真正该提高的部分.当然先用是入门的很重要的第一步.

SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传的更多相关文章

  1. SSH深度历险(十一) AOP原理及相关概念学习+xml配置实例(对比注解方式的优缺点)

    接上一篇 SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP,本篇我们主要是来学习使用配置XML实现AOP 本文采用强制的CGLB代理方式 Security ...

  2. SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP

    AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...

  3. Springmvc+uploadify实现文件带进度条批量上传

    网上看了很多关于文件上传的帖子,众口不一,感觉有点乱,最近正好公司的项目里用到JQuery的uploadify控件做文件上传,所以整理下头绪,搞篇文档出来,供亲们分享. Uploadify控件的主要优 ...

  4. SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传

    在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期 ...

  5. SSH深度历险(七) 剖析SSH核心原理(一)

    接触SSH有一段时间了,但是对于其原理,之前说不出来莫模模糊糊(不能使用自己的语言描述出来的就是没有掌握),在视频和GXPT学习,主要是实现了代码,一些原理性的内容还是欠缺的,这几天我自己也一直在反问 ...

  6. jquery uploadify在谷歌浏和火狐下无法上传的解决方案(.Net版)

    在项目紧张的进行过程中,jquery uploadify上传不兼容的问题一直没有试着去解决,只幻想着用ie的人越来越多,怎么奈何firefox4刚推出,就有4000万的下载.......仰天长叹,记生 ...

  7. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了详细总结,在此之间对Spring的事务配置只是停留在听说的阶段,总结一下,整体把控,通过这次的学习发觉Spring的事务配置只要把思路 ...

  8. SSH深度历险(三) EJB Session Bean有状态和无状态的差别与联系

    刚開始对两种sessionbean存在误解.觉得有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用.而觉得无状态是每次调用实例化一次,不保留用户信息.细致分析并用实践检验后,会发现,事实 ...

  9. SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

           在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...

随机推荐

  1. 例10-7 uva10820(欧拉)

    题意:输入n,要求满足1≤x,y≤n,且x,y互素的个数. 若输入2,则答案3为(1,1),(1,2),(2,1);所以欧拉函数求出所有数的phi值,除了1之外都加上phi值的2倍即可 通过推导: p ...

  2. c++读写MySQL

    看过很多C或是C++操作MySQL数据库的文章,大部分太吃力了,甚至有一部分根本没有很好的组织文字,初学者比较难以接受,即使是C++或是C高手也是比较难看懂.写这篇文章的目的不是别的,就一个,告诉您用 ...

  3. Python中byte与str

    原文传送门:请点击 现在计算机中,在内存中采用unicode编码方式. 可以看到上图中,字节型数据t并没有像想象中的一样显示0,1字符串.显示仍然是b,这是因为t是采用utf-8来编码,而utf-8与 ...

  4. glusterfs 4.0.1 event模块 分析笔记1

    1. 前言 在C语言i中,存储变量的结构体加上一组函数指针,大概就可以算是一个对象模型了:如果将一组函数指针捆绑为结构体, 后期根据配置或者环境需要绑定到不同实现模块中的一组函数,可以认为是C语言面对 ...

  5. linux修改root账户的用户名所得的教训

    之前linux服务器的密码被别人改过, 然后叫服务器相关的负责人重置了root账户(服务器负责人在客户所在公司), 重置好之后, 领导叫更改下root 用户名和密码, 于是我二话不说就开始找方法, 找 ...

  6. idea,mybatis读取配置文件报错:Could not find resource configuration.xml

    在pom.xml中,把xml文件加入编译,成功解决问题. <build> <resources> <resource> <directory>src/m ...

  7. 1-学习GPRS_Air202(Air202开发板介绍)

    记得自己第一次实现远程通信是在学校里用SIM900A实现的,随着WIFI模块的普及自己就开始用WIFI模块了,当然WIFI模块已经用的很... WIFI模块要想实现远程控制必须连接路由器,其实在做王哥 ...

  8. Go 语言切片(Slice)

    Go 语言切片是对数组的抽象. Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固 ...

  9. Tomcat中的c3p0数据库连接池的释放

    一个项目通过c3p0获得连接池,相关代码如下: public class JdbcUtil { // 连接池的核心类 private static ComboPooledDataSource data ...

  10. 操作系统内核Hack:(四)内核雏形

    操作系统内核Hack:(四)内核雏形 在本系列的前一篇文章<操作系统内核Hack:(三)BootLoader制作>中,我们制作出了一个两阶段引导BootLoader,并进入了一个内核的空壳 ...