- 浏览: 1418671 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
该文件上传实现可以限制上传文件的类型,限制上传文件的最大字节数,上传文件既可以存储在相对路径下,也可以存储在绝对路径下。
一、Model类源代码
public class Attachments { private long id; private String name; //文件名 private String path; //上传文件存放的子目录路径 private Long fileSize; //文件大小,单位为K private String contentType; //文件类型 private String refName = "attachment"; //引用名称,默认为attachment,可用于区分普通附件与特殊附件。 private String entityName; //指定与附件关联的表单的实体名称 private String entityId; //指定与附件关联的表单的主键值 private String creator; //创建人 private Timestamp createDate; //创建时间 private File attachFile; //待上传的文件对象 ...... }
二、Action类源代码
public class UploadAction extends BaseAction { private UploadService uploadService; private Attachments attach; //限制 private String allowTypes = ""; private long maxSize = 0; //字节 //上传的文件 private File upload; private String uploadFileName; private String uploadContentType; ...... //获取与表单关联的所有附件信息 public String attachList() throws Exception{ List attachList = uploadService.queryAttachments(attach); getValueStack().set("attachList", attachList); return SUCCESS; } //上传附件 public String upload() throws Exception{ String method = getRequest().getMethod(); if(method.equalsIgnoreCase("post")){ if(upload != null){ if(upload.length() <= 0){ throw new RuntimeException("上传的文件不能为空!"); } if(maxSize > 0 && upload.length() > maxSize){ throw new RuntimeException("上传的文件不能超过" + maxSize + "字节!"); } allowTypes = CommonUtil.trim(allowTypes); if(CommonUtil.isNotEmpty(allowTypes)){ int idx = uploadFileName.lastIndexOf("."); String extendName = uploadFileName.substring(idx+1); //扩展名 List typesList = CommonUtil.toList(allowTypes, ","); if(!typesList.contains(extendName)){ throw new RuntimeException("只能上传扩展名为[ " + allowTypes + " ]的文件!"); } } attach.setAttachFile(upload); attach.setName(uploadFileName); attach.setFileSize(new Long(upload.length() / 1024)); //K attach.setContentType(uploadContentType); attach.setCreator(SecurityUtil.getUserId()); attach.setCreateDate(DatetimeUtil.nowTimestamp()); uploadService.addAttachment(attach); }else{ return INPUT; } }else{ return INPUT; } return SUCCESS; } //删除附件 public String attachDelete() throws Exception{ Map map = RequestUtil.getParameterMap(getRequest(), "chk_o_"); uploadService.deleteAttachment(map); StringBuffer sb = new StringBuffer(); sb.append("attachList.action?attach.entityName=" + CommonUtil.trim(attach.getEntityName())); sb.append("&attach.entityId=" + CommonUtil.trim(attach.getEntityId())); sb.append("&attach.refName=" + CommonUtil.trim(attach.getRefName())); sb.append("&attach.path=" + CommonUtil.trim(attach.getPath())); sb.append("&allowTypes=" + CommonUtil.trim(allowTypes)); sb.append("&maxSize=" + maxSize); getValueStack().set("url", sb.toString()); return SUCCESS; } //下载附件 public String download() throws Exception{ return SUCCESS; } public InputStream getTargetFile() throws Exception{ attach = uploadService.getAttachment(attach.getId()); uploadFileName = URLEncoder.encode(attach.getName(), "UTF-8"); //解决中文乱码问题 String filePath = attach.getPath(); if(filePath.indexOf(":") == -1){ //相对路径 return ServletActionContext.getServletContext().getResourceAsStream(filePath); }else{ //绝对路径 return new FileInputStream(filePath); } } }
三、Service类源代码
public class UploadService extends BaseService { /** * 保存附件信息并将附件文件存储到指定目录下 */ public void addAttachment(Attachments attach)throws Exception{ if(CommonUtil.isEmpty(attach.getRefName())) attach.setRefName("attachment"); //文件存储基路径 String path = CommonUtil.trim(attach.getPath()); if(CommonUtil.isNotEmpty(path)){ if(path.endsWith("/") == false && path.endsWith("\\") == false){ path += File.separator; } if(path.startsWith("/")==false && path.startsWith("\\")==false){ if(Constants.attachBasePath.endsWith("/")==false && Constants.attachBasePath.endsWith("\\")==false){ path = File.separator + path; } } } path = Constants.attachBasePath + path; attach.setPath(path); save(attach); //文件存储路径 if(path.endsWith("/") == false && path.endsWith("\\") == false){ path += File.separator; } path += attach.getId() + "_o_" + attach.getName(); attach.setPath(path); update(attach); //目标文件 String filePath = path; if(filePath.indexOf(":") == -1) filePath = ServletActionContext.getRequest().getRealPath(filePath); //不是绝对路径就转成绝对路径 File dstFile = new File(filePath); FileUtil.createPath(dstFile.getParent()); //目标目录不存在时创建 //文件保存 try{ FileUtil.copyFile(attach.getAttachFile(), dstFile); }catch(FileNotFoundException ex){ throw new ServiceException("文件不存在:" + attach.getName()); } } /** * 删除选中的附件信息及其对应的文件 */ public void deleteAttachment(Map map) throws ServiceException{ List pathList = new ArrayList(); for(Iterator it=map.keySet().iterator();it.hasNext();){ String key = (String)it.next(); String value = (String)map.get(key); Attachments attach = (Attachments)load(Attachments.class, new Long(value)); if(attach != null){ pathList.add(attach.getPath()); delete(attach); } } for(int i=0;i<pathList.size();i++){ String filePath = (String)pathList.get(i); if(filePath.indexOf(":") == -1){ filePath = ServletActionContext.getRequest().getRealPath(filePath); } File file = new File(filePath); FileUtil.deleteFile(file); } } /** * 查找附件 */ public List queryAttachments(Attachments attach)throws Exception{ DetachedCriteria dc = DetachedCriteria.forClass(Attachments.class); CriteriaUtil.eq(dc, "entityName", attach.getEntityName()); CriteriaUtil.eq(dc, "entityId", attach.getEntityId()); CriteriaUtil.eq(dc, "refName", attach.getRefName()); dc.addOrder(Order.asc("createDate")); return findByCriteria(dc); } public Attachments getAttachment(long id)throws Exception{ return (Attachments)load(Attachments.class, new Long(id)); } }
评论
4 楼
韩悠悠
2011-01-10
eric851018 写道
我就喜欢你这种写法
多看看源代码,尤其是spring,这种写法很一般。
3 楼
eric851018
2010-10-26
我就喜欢你这种写法
2 楼
osacar
2010-09-12
不错,比其他那些好多了。
1 楼
qiaoakai
2009-05-26
太好了,如果 要把源码作为附件 能下载 那就更好了!!谢谢了 呵呵
发表评论
-
在Struts2中对Ajax请求的异常进行统一处理
2016-04-18 18:32 6841、自定义异常类 public class AjaxExc ... -
struts2原理
2015-10-15 22:00 721一个Struts2请求处理的步骤大致如下: 1、 ... -
struts2 + poi 数据导出excel
2013-03-18 17:47 1508java源码: import java.io.ByteAr ... -
在Freemarker中使用JSP标签库
2010-06-02 17:24 7049Freemarker作为Struts2的其中一种结果类型,可以 ... -
Struts2 Convention插件的使用
2010-05-17 23:58 72581、常量说明 struts.convention ... -
学习笔记:杂项
2010-04-23 20:40 2721一、在web.xml文件配置Str ... -
Struts2插件的开发
2010-04-21 21:16 3238一、插件类 /** * 使用Struts2的Plugin ... -
读书笔记:Struts2拦截器
2008-11-10 21:19 15301、拦截器相关基础类 Interceptor接口 ... -
自定义标签:联动下拉框(二)
2008-10-27 09:48 3214四、下拉框数据获取方法的源代码 public String f ... -
自定义标签:联动下拉框(一)
2008-10-26 12:22 3415该标签主要实现以下功能:当父下拉框的当前值发生变化时 ... -
基于Struts2的通用文件上传实现(二)
2008-10-25 11:36 2552四、Action配置 <action name=&quo ... -
自定义标签:下拉框月份选择控件
2008-10-21 22:17 2862一、标签源代码 public class CalendarMo ... -
自定义标签:下拉框年份选择控件
2008-10-21 22:13 5687一、标签源代码 public cl ... -
自定义标签:分页标签
2008-10-21 09:58 4553一、标签类源代码 public class PageNavig ... -
自定义标签:在JSP页面中动态执行Spring Bean的方法
2008-10-06 13:37 6142使用该自定义标签,可以在JSP页面中动态执行某个Sp ... -
Struts2标签的使用
2008-09-25 12:36 18971、iterator标签:用于对集合进行迭代 &l ...
相关推荐
struts2必须包,commons-fileupload-1.3.1.jar 实现文件上传包,commons-io-2.2.jar 用来处理IO的一些工具类包,commons-lang3-3.1.jar 提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现...
3.5 案例研究:文件上传 56 3.5.1 通过struts-default包获得内建的支持 56 3.5.2 fileUpload拦截器做什么 57 3.5.3 Struts 2公文包示例代码研究 58 3.6 小结 60 第4章 使用拦截器追加工作流 61 4.1 为什么要拦截...
作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...
如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...
同时也实现了文件上传(基于struts2的文件上传功能)。 4、代码下载,下载功能会判断用户是否下载过该代码,若下载过则不扣积分。下载功能也是基于struts2的下载模块实现的。 5、代码评论,该功能是我仿照qq空间评论...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...