最近实现了文件上传的功能,是基于spring +struts+jquery实现的。
需要注意的是 前台要引用jquery的 ajaxfileupload.js 文件。
具体伪代码如下:
1,控制层.
我们提供了一个基类定义了一个文件上传的基本设置,比如控键名和上传路径等,如何想要特别处理,需要子类继承 UploadFileCallback,实现callback 方法。
下面代码是我整合后的基类和实现类在一起后的效果。
public class UploadAction extends ActionSupport implements Preparable, ModelDriven, UploadFileCallback{ public static String UPLOADFRONTENDBASEPATH = "/home/upload"; static { //the path of upload file UPLOADFRONTENDBASEPATH = SettingManager.getInstance().getConfig().getString("uploadfrontEndBasePath"); } private File[] uploadFile; private String[] uploadFileFileName; private static final String[] imageSuffix = {".jpg",".JPG",".jpeg",".JPEG",".gif",".GIF",".png",".PNG",".bmp",".BMP",".ico",".ICO"}; public String[] processUploadFile() { if (uploadFile != null) { String suffix = uploadFileFileName[0].substring(uploadFileFileName[0].lastIndexOf(".")); Arrays.sort(imageSuffix); int result = Arrays.binarySearch(imageSuffix, suffix); // 在数组中搜索是否含有该后缀名 if (result < 0) { // 如果不包含,返回特殊值 return new String[] { "FORMAT_ERROR" }; } int fileCounts = uploadFile.length; logger.debug("UploadFile counts :" + fileCounts); // 按照File[]的长度初始化一个用于返回文件上传结果的String数组,这个数组的元素与File[]的元素一一对应 String[] uploadFileResult = new String[fileCounts]; // 判断子类是否实现了UploadFileCallback接口,如果实现了该接口,文件处理逻辑移交到子类实现. if (this instanceof UploadFileCallback) { UploadFileCallback callback = (UploadFileCallback) this; for (int i = 0; i < this.uploadFile.length; i++) { uploadFileResult[i] = callback.callback(this.uploadFile[i], this.uploadFileFileName[i]); } } else { // 子类没有实现UploadFileCallback接口,采用默认的文件处理方式:将上传的文件保存到应用的files目录中. String appDir = this.getRequest().getSession() .getServletContext() .getRealPath(DEFAULT_UPLOAD_FILE_DIR) + File.separator; File dir = new File(appDir); if (!dir.exists()) { dir.mkdir(); } for (int i = 0; i < this.uploadFile.length; i++) { String filePath = appDir + this.uploadFileFileName[i]; try { // 把临时文件复制到目标路径下 FileUtils.copyFile(this.uploadFile[i], new File( filePath)); // 文件地址作为上传结果返回 uploadFileResult[i] = filePath; } catch (IOException e) { e.printStackTrace(); } } } return uploadFileResult; } else { return null; } } public File[] getUploadFile() { return uploadFile; } public void setUploadFile(File[] uploadFile) { this.uploadFile = uploadFile; } public String[] getUploadFileFileName() { return uploadFileFileName; } public void setUploadFileFileName(String[] uploadFileFileName) { this.uploadFileFileName = uploadFileFileName; } /** * 图片上传回调函数 */ @Override public String callback(File uploadFile, String uploadFileFileName) { String suffix = uploadFileFileName.substring(uploadFileFileName.lastIndexOf(".")); uploadFileFileName =generateFileName(suffix); //BACK GROUND String appDir = getFeedbackPath(BASEPATH); String filePath = appDir + uploadFileFileName; File old = new File(filePath); if(old.exists()){ old.delete(); } try { // 把临时文件复制到目标路径下(同时备份) FileUtils.copyFile(uploadFile,new File(URLDecoder.decode(filePath, "UTF-8"))); //如果前后台部署在二个tomcat下面,那么图片则同时复制一份。 if(!UPLOADFRONTENDBASEPATH.equals(BASEPATH)){ //FRONT END String frontDir = getFeedbackPath(UPLOADFRONTENDBASEPATH); String frontFilePath = frontDir + uploadFileFileName; File frontOld = new File(frontFilePath); if(frontOld.exists()){ frontOld.delete(); } // 把临时文件复制到目标路径下(同时备份) FileUtils.copyFile(uploadFile,new File(URLDecoder.decode(frontFilePath, "UTF-8"))); } } catch (IOException e) { e.printStackTrace(); } return uploadFileFileName; } // 存放图片地址 public String getFeedbackPath(String basepath) { String realPath = basepath + File.separator+"feedbackPic" + File.separator; File dir = new File(realPath); if (!dir.exists()) { dir.mkdir(); } return realPath; } private String generateFileName(String fileName) { DateFormat format = new SimpleDateFormat("yyMMddHHmmss"); String formatDate = format.format(new Date()); int random = new Random().nextInt(10000); int position = fileName.lastIndexOf("."); String extension = fileName.substring(position); return formatDate + random + extension; } /** * * @return */ public String ajaxUploadFiles(){ Map<String, Object> result = new HashMap<String, Object>(); String[] files= processUploadFile(); if(files != null && files.length>0){ if("FORMAT_ERROR".equals(files[0])){ result.put("isSuccess", false); }else{ result.put("filePath", files[0]); result.put("isSuccess", true); } } this.getRequest().setAttribute(GsonResult.GSON_RESULT_OBJECT, result); return "ajax"; } }
2. jsp 界面
我采用的是ajax处理图片上传。 上传控键名为uploadFile。
<!-- js reference--> <script type="text/javascript" src="scripts/jquery/ajaxfileupload.js"></script> <script type="text/javascript" src="scripts/jquery/jquery1.7.js"></script> <div> <a href="javascript:addImgAttachment();" id="staffInfo_add"> <i class="ydicons ydicons-feedbackAttach"></i> 添加附件 </a> <input class="" id="uploadFile" name="uploadFile" type="file" accept="image/*" onchange="uploaderImg();" style="display:none;"> </div> <script type="text/javascript"> function uploaderImg() { $.ajaxFileUpload({ url : "${ctx}/ss/ssAjax/Upload/ajaxUploadFiles.do", //上传文件的服务端 secureuri : false, //是否启用安全提交 dataType : "json", //数据类型 fileElementId : "uploadFile", //表示文件域ID success : function(data) {//提交成功后处理函数 html为返回值,status为执行的状态 if (data.isSuccess) { //上传成功后处理 } }, error : function(data, status, e) {//提交失败处理函数 alert("上传失败!" + e); } }); } </script>
相关推荐
在IT行业中,构建Web应用程序是常见的任务之一,而Spring、Struts2和JQuery是三个常用的框架和技术,它们各自在不同的层面上发挥作用,共同助力于高效、稳定的开发。本项目"Spring+Struts2+JQuery实现简单的登录功能...
1. **配置文件**:如hibernate.cfg.xml(Hibernate配置文件),struts.xml(Struts配置文件),spring配置文件(如applicationContext.xml,用于定义bean及它们之间的依赖关系)。 2. **实体类**:对应数据库表的...
- `src/main/resources`:存放配置文件,如Spring的beans.xml、Hibernate的hibernate.cfg.xml,以及Struts的struts-config.xml等。 - `WebContent/WEB-INF`:存放web.xml(Web应用的部署描述符),以及视图资源,...
Struts+Spring+Mybatis+EasyUI(jQuery)注解案例。采用注解的方式跟踪代码依赖性,实现替代配置文件功能。里面包含了平时用的增删改查及分页,分页查询时用的是存储过程,提高了数据库的性能。代码简单、易懂。
spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 Compass将lucene、Spring、Hibernate三者结合
基于spring+struts2+ibatis开发的简单项目,里面有增加,修改,删除,查找功能,前台使用了ligerUI插件,需在jsp页面引用ligerUI的js文件,适合有一定jquery,java的初学者,并对ligerUI有一定的了解,否则将很难理解...
在集成这四个组件时,首先我们需要在pom.xml文件中添加相应的依赖,然后创建项目的目录结构,包括src/main/resources下的配置文件(如struts.xml、spring-context.xml、mybatis-config.xml等),以及src/main/webapp...
Eclipse+Struts2+Spring+MyBatis+jQuery整合教程,Eclipse+Struts2+Spring+MyBatis+jQuery整合教程.
json+jquery+struts2+hibernate+spring 实现的小型bbs系统,这个提供包 ,很不错的下载后,好好徐希一下吧
【标题】:“jQuery EasyUI+Struts2+Spring+Hibernate基于注解实现的CRM系统” 在IT领域,CRM(Customer Relationship Management,客户关系管理)系统是企业用来优化与客户交互和管理的重要工具。本项目利用一系列...
在IT行业中,jQuery Grid(通常简称为jGrid)是一个强大的JavaScript数据网格插件,它能够与后端的数据存储系统如Spring、Struts和Hibernate等Java框架无缝集成,以实现高效的数据展示和管理。这个名为"jquerygrid+...
可直接做毕业设计!Spring+Struts2+Hibernate框架 javaweb网络商城系统,管理员、商户、游客、购买者,商品信息,订单详情,购物车设计,完整代码_精美页面_可执行Mysql文件,系统导入Myeclipse即可执行!
开发者需具备丰富的Java Web开发经验,对Spring、Struts、Hibernate等框架有深入理解,并能熟练掌握数据库设计和管理、前端交互以及消息队列等技术。这样的系统设计既体现了技术的多样性和灵活性,也对团队的技术...
`MyAddressList.rar`可能是一个包含项目源代码或资源的压缩文件,可能包含了Struts2、Spring、Hibernate的配置文件,jQuery的JavaScript文件,以及相关的HTML模板,这些文件共同构成了一个实际运行的Web应用示例。...
JEECMS使用目前java主流技术架构:hibernate3+struts2+spring2+freemarker。AJAX使用jquery和json实现。视图层并没有使用传统的JSP技术,而是使用更为专业、灵活、高效freemarker。 数据库使用MYSQL,并可支持orcale...
标题 "Spring+Hibernate+Struts+ajax+jQuery easyUI" 提到的是一个经典的Java Web开发技术栈,这个组合被广泛用于构建复杂的企业级应用程序。让我们深入探讨这些技术及其相互作用。 1. **Spring**:Spring 是一个...
"Struts2+Spring+Ibatis+MySQL" 是一个经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。这个组合集成了强大的MVC(Model-View-Controller)框架Struts2、依赖注入与面向切面编程的Spring框架、...
【标题】"jQuery EasyUI 项目整合 Hibernate、Spring 和 Struts2.0" 【内容详解】 这个项目展示了如何将流行的前端框架jQuery EasyUI与后端的流行Java开发框架Hibernate、Spring和Struts2.0进行集成,以构建一个...
以上就是关于"spring+struts2+mybatis框架实现单表增删改查、条件查询和分页、文件上传"项目的详细知识点解析。通过这个项目,初学者可以深入理解Java Web开发的流程,掌握SSM框架的整合与应用,以及数据库操作和...
该项目是一个基于Spring、Struts2和EasyUI的Web应用程序,旨在提供一套完整的权限控制系统。Spring作为核心框架,负责管理应用的bean和实现依赖注入,从而提高代码的可测试性和可维护性。Struts2作为MVC框架,处理...