使用struts,ibaits和JSTL开发简便通用的文件上传…
2008-02-23 09:53:43来源:互联网 阅读 ()
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
try {
Service.initSet();
if (form instanceof DynaActionForm) {
DynaActionForm fm = (DynaActionForm) form;
FormFile ff = (FormFile) fm.get("upload");
if (ff != null && ff.getFileSize()>0) {
String fileName =
Service.getPath().substring(
0,
Service.getPath().length()
- "/Web-INF/classes".length())
"file/"
ff.getFileName();
HashMap map = new HashMap();
map.put(Constattachment.ATTACHDESC, fm.get("desc"));
map.put(Constattachment.ATTACHFILENAME, ff.getFileName());
map.put(
Constattachment.ATTACHMIMETYPE,
ff.getContentType());
map.put(Constattachment.ATTACHCREATIONDATE, new Date());
map.put(Constattachment.ATTACHMODIFIEDDATE, new Date());
map.put(
Constattachment.ATTACHFILESIZE,
String.valueOf(ff.getFileSize()));
map.put(
Constattachment.ATTACHFILEPATH,
"/file/" ff.getFileName());
map.put(
Constattachment.ATTACHCREATIONIP,
request.getRemoteAddr());
FileManager.saveFile(fileName, ff);
AttachDb attachDb = new AttachDb();
DaoCommon.startTransaction();
attachDb.insert(map);
DaoCommon.commit();
request.setAttribute("url", fm.get("url"));
request.setAttribute(
"fileName",
"/file/" ff.getFileName());
log.info(ff.getFileName());
return mapping.findForward("success");
}
}
ActionErrors errors = new ActionErrors();
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError("errors.general", "请选择一个文件!"));
saveErrors(request, errors);
return mapping.findForward("false");
} catch (DaoException e) {
log.error(e, e);
DaoCommon.rollBack();
ActionErrors errors = new ActionErrors();
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError("errors.general", "数据库操作错误!"));
saveErrors(request, errors);
return mapping.findForward("false");
} catch (FileNotFoundException e) {
log.error(e, e);
ActionErrors errors = new ActionErrors();
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError("errors.general", "文件保存错误!"));
saveErrors(request, errors);
return mapping.findForward("false");
} catch (IOException e) {
log.error(e, e);
ActionErrors errors = new ActionErrors();
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError("errors.general", "文件操作错误!"));
saveErrors(request, errors);
return mapping.findForward("false");
} catch (Exception e) {
log.error(e, e);
ActionErrors errors = new ActionErrors();
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError("errors.general", "意外错误!"));
saveErrors(request, errors);
return mapping.findForward("false");
}
}
从上面可以看出,文件的保存工作很简单,只有三句
DynaActionForm fm = (DynaActionForm) form;
FormFile ff = (FormFile) fm.get("upload");
FileManager.saveFile(fileName, ff);
此处有一个DynaActionForm,通过DynaActionForm我们可以节省一个ActionForm的工作了。当然,这也多了一个配置工作。在struts-conifg.xml里加一个
<!-- upload form bean -->
<form-bean name="uploadForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="upload" type="org.apache.struts.upload.FormFile"/>
<form-property name="url" type="java.lang.String"/>
<form-property name="desc" type="java.lang.String"/>
</form-bean>
这样,struts在页面提交以后会自动去找upload、rul和 desc这三个输入 ,并将它转成相应的数据类型。
所以我们很容易得到一个FormFile对象,而这个对象就包含了上传文件的所有信息。因此,我们的数据表相应的信息也有了
map.put(Constattachment.ATTACHFILENAME, ff.getFileName());
map.put( Constattachment.ATTACHMIMETYPE, ff.getContentType());
map.put( Constattachment.ATTACHFILESIZE, String.valueOf(ff.getFileSize()));
map.put( Constattachment.ATTACHFILEPATH, "/file/" ff.getFileName());
最后我们只要简单的调用函数插入数据库
DaoCommon.startTransaction();
attachDb.insert(map);
DaoCommon.commit();
核心技术基本讲解完毕。下面讲一下实现的流程。大家可以先看一下demo。首先是一个index页面,可以选择一个上传一个图片文件直接显示出来。也可以把内容显示在input框中。
<form name="form1"><img name="image1" src="">
<input type="text" name="txt">
</form>
<input type="button" value="检测" onclick="alert(image1.src)">
<input type="button" value="上传文件" onclick="popUpWindow(´<c:url value="/upload.do?m=list&url=document.image1.src"/>´)">
<input type="button" value="上传文件(文件名到输入框)" onclick="popUpWindow(´<c:url value="/upload.do?m=list&url=document.form1.txt.value"/>´)">
index.JSP的主要内容如上:主要特别的一点的地方就是<c:url>,是JSTL的url的tag,通过它可以得到相对路径的URL。两个按钮的弹出框都是upload.do,方法是list.list的方法很少
AttachDb attachDb = new AttachDb();
DaoCommon.startTransaction();
request.setAttribute("fileslist", attachDb.find(new HashMap()));
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- eclipse使用struts2找不到action方法或找不到action的错误记 2018-12-11
- 使用struts框架后的404错误 2018-12-03
- [J2EE从入门到精通第4讲]使用Struts开发Web应用程序(上) 2008-02-23
- 使用Struts的Token机制解决表单的重复提交 2008-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
