struts 文件上传(主框架、子框架传值等问题)
来源:互联网 发布:网站搜索引擎优化分析 编辑:程序博客网 时间:2024/04/29 18:33
-、功能要求:
1.基本文件上传
2.jsp页面参数指定文件上传到服务器的路径
3.jsp页面参数限制上传文件类型
4.在服务器端保存文件到文件夹,保存文件路径到数据库
二、开发环境
- 开发语言 -- jdk1.5
- web应用服务器 -- tomcat5.5
- IDE工具 -- eclipse3.2+myeclipse5.1+Subclipse
- 代码、文档管理工具 -- Svn1.4
- 数据库 -- Oracle9i
三、系统架构
<1> Web层采用struts
<2> Service层采用spring
<3> 持久层采用hibernate
四、上传模块的实现(struts层)---相对独立。
使用组件:Struts Upload
主页面
子页面
Jsp
b.jsp
a.jsp
Action
productActionàproductDAOàproduct
UploadAction/UploadForm
表单
产品编号
名称
生产厂家
上传文件路径(hidden)
指定文件路径
被限制文件类型
上传的文件
调用方式
外部菜单
<iframe src=””></iframe>
执行按钮
提交、重置、返回
上传
工作逻辑:
点击相关菜单后,跳转到“产品添加”主页面。在主页面中设置“允许上传文件的类型”和“上传到服务器的路径”,并在<iframe src=””>的路径中作为参数传给子页面(负责上传文件)。在主页面中上传子框架内点击“浏览”按钮,选择需上传的文件,然后点击“上传”按钮进行上传,在UploadAction中进行上传处理,取得文件上传到服务器的路径后,通过
将文件在服务器上的路径传回 a.jsp页面(子页面),在a.jsp页面中通过
将在a.jsp子页面中取得的由UploadAction传回的文件路径再传给b.jsp主页面. 这时主页面已经得到了子页面传回的“上传文件在服务器上的路径”。将添加表单的其他项(如产品编号、名称、生产厂家等)填写完整后(这一步可以先于文件上传来做),点击“提交”按钮,提交整个表单(包括了 文件路径 在页面中是以隐式标签来做),将表单信息添加到数据库。
页面示例图:
<1>如何从主框架向子框架传递参数(允许上传文件的类型,上传到服务器的路径 在主页面中指定)
<%
String sub_path = "incoming/zygl/equipment";
String up_file_type = "txt,rar,zip,doc";
%>
<tr><td class="td">
<html:hidden name="hidd" styleClass="shuru" property="filePath" value="" />
<html:errors property="filePath"/>
</td>
</tr>
<tr><td class="td"><span class="font13b">产品说明书:</span>
<iframe
src="../../../../commons/a.jsp?subPath=<%=sub_path%>&upFileType=<%=up_file_type%>"
name="display" width="300" height="25"
marginwidth="0" marginheight="0" scrolling="no" frameborder="0">
</iframe>
</td>
</tr>
<2>如何从子框架向主框架传第参数
<script type="text/javascript">
function pathPush()...{
//子框架向主框架传值
if("${filePath}" != "null" && "${filePath}" != "")...{
parent.document.all.filePath.value = "${filePath}";
}
// 一些异常情况提示
if("${errMessage}" != "")...{
alert("${errMessage}");
}
}
</script>
<body onLoad="pathPush();">
<%
String path = (String) request.getAttribute("filePath");
%>
<%
if (path != null) ...{
%>
上传成功!
<%
} else ...{
%>
<html:form action="uploadsAction.do" enctype="multipart/form-data">
<html:hidden property="subPath" value="<%=request.getParameter("subPath")%>" />
<html:hidden property="upFileType" value="<%=request.getParameter("upFileType")%>" />
<html:file property="theFile" />
<html:submit value="上传" />
</html:form>
<%
}
%>
</body>
<tr><td class="td">
<html:hidden name="hidd" styleClass="shuru" property="filePath" value="" />
<html:errors property="filePath"/>
</td>
</tr>
<3>路径乱码问题
描述:在a.jsp中取得的filePath值为乱码,且路径分隔符“/”也不见了。传到数据库中的文件路径也是乱码。
如:E:Apache Software FoundationTomcat 5.5/webapps/mmxtincoming/20010331115151_新建 文本文档.txt
变为
E:Apache Software FoundationTomcat 5.5webappsmmxtincoming?10331115151_怴寶 暥杮暥瀮.txt
问题原因:路径分隔符“/”,在传递过程中被屏蔽。
解决办法:增加一个字符串替换函数,将“/”替换为“//”则在传递过程中就无误了。
* strSource 需要替换的源字符串
* strFrom 被替换的字符串
* strTo 替换为的字符串
*/
public static String replace(String strSource, String strFrom, String strTo) ...{
if (strSource == null) ...{
return null;
}
int i = 0;
if ((i = strSource.indexOf(strFrom, i)) >= 0) ...{
char[] cSrc = strSource.toCharArray();
char[] cTo = strTo.toCharArray();
int len = strFrom.length();
StringBuffer buf = new StringBuffer(cSrc.length);
buf.append(cSrc, 0, i).append(cTo);
i += len;
int j = i;
while ((i = strSource.indexOf(strFrom, i)) > 0) ...{
buf.append(cSrc, j, i - j).append(cTo);
i += len;
j = i;
}
buf.append(cSrc, j, cSrc.length - j);
return buf.toString();
}
return strSource;
}
相应部位改为:filePath = replace(filePath,"//", "//"+"//");
//UploadAction.java
//取得上传的文件
UpLoadForm theForm = (UpLoadForm) form;
FormFile file = theForm.getTheFile();
//如果上传文件为空
if(fileName.equals("")){
request.setAttribute("errMessage", "请选择要上传的文件");
return mapping.findForward("display");
}
//文件类型限制
if(!isValidFile(fileName,theForm.getUpFileType())){
System.out.println("不允许上传该类型文件");
request.setAttribute("errMessage", "不允许上传该类型文件");
return mapping.findForward("display");
}
//文件大小限制
if(file.getFileSize() > (10*1024*1024)){
request.setAttribute("errMessage", "文件大小最大为10M");
return mapping.findForward("display");
}
…… … 中略 … ……
//取文件保存到服务器的路径
String filePath = request.getRealPath("/") + theForm.getSubPath() + "//";
filePath = replace(filePath,"//", "//"+"//");
//上传文件类型设定
private boolean isValidFile(String fileName, String upFileType) {
String[] validFiles;
validFiles = upFileType.split(",");
boolean ret = false;
for (int i = 0; i < validFiles.length; i++) {
if (fileName.toLowerCase().endsWith(validFiles[i])) {
ret = true;
break;
}
}
return ret;
}
五、部分源文件下载(部分文件名与例子有出入)
http://fileblog.hjbbs.com/upload/200804/20080401100006614_817_2213.rar
相关论坛帖子参考:
http://topic.csdn.net/u/20080331/12/d660792e-1a05-41c9-89e9-272d5d152a2b.html
http://topic.csdn.net/u/20080331/12/d660792e-1a05-41c9-89e9-272d5d152a2b.html
- struts 文件上传(主框架、子框架传值等问题)
- 文件上传(Struts框架)
- struts框架-实现文件上传
- struts框架解决多文件的上传问题(首次更博……)
- SSH:Struts1框架(采用struts上传文件)
- Struts框架之文件的上传
- struts框架简单文件上传模型
- 基于struts框架的文件上传
- SSH框架之Struts的文件上传
- Struts2 框架上传文件问题
- 自学SSH框架之---struts(六):struts的上传文件功能
- Struts 2框架下载png、excel等格式的文件
- 在struts框架下实现文件的上传
- SSH框架Struts文件上传自定义错误提示信息解决方案
- 基于struts框架的文件上传与下载代码
- Java三大框架之struts的上传文件
- Java三大框架之struts的多文件上传
- java框架Struts学习--文件上传与下载
- 我的Linux PC开发环境
- sql 介绍
- double中保留小数点后指定长度位数
- C# 中的委托和事件
- DES算法的加密解密类,由于MD5很难解密,自己不方便,所以用这个了
- struts 文件上传(主框架、子框架传值等问题)
- m_buff介绍
- struts2的ONGL标签详解--2
- 羡慕研究生啊
- 关于使用EFS加密SQL-Server数据库的心得
- 日语五段动词的连用形2
- Google的未来搜索
- 非常好的BASH脚本编写教程
- 学习网址