现在的位置: 首页 > 综合 > 正文

解决 jsp 文件上传的类

2013年07月28日 ⁄ 综合 ⁄ 共 2045字 ⁄ 字号 评论关闭
原来只知道jspsmart 类是用来处理jsp 文件上传的有用类,但是由于form 添加了enctype的属性使jsp内置对象reuqest失效,这一问题由于没有实际的需求到,就没有想去解决,前几天突然有人问我这方面的问题我一时也回答不上来,就到网上查了一下,原来jspsamrt 这个工具包不仅包含了处理上传文件的 SmartFile类,还有一个替代request内置对象的类SmartRequest。 下面把接收页面的示例代码转载一下,

<%@ page contentType="text/html; charset=utf8" language="java"

import="jspsmart.*" errorPage="" %>

<title>文件上传处理页面</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf8">

<%

// 新建一个SmartUpload对象

SmartUpload su = new SmartUpload();

// 上传初始化

su.initialize(pageContext);

// 设定上传限制

// 1.限制每个上传文件的最大长度。

// su.setMaxFileSize(10000);

// 2.限制总上传数据的长度。

// su.setTotalMaxFileSize(20000);

// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。

// su.setAllowedFilesList("doc,txt");

// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,

//jsp,htm,html扩展名的文件和没有扩展名的文件。

// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");

// 上传文件

su.upload();

// 将上传文件全部保存到指定目录

int count = su.save("../webapps/");

out.println(count+"个文件上传成功!<br/>");

// 利用Request对象获取参数之值

out.println("TEST="+su.getRequest().getParameter("TEST")

+"<BR><BR>");

// 逐一提取上传文件信息,同时可保存文件。

for (int i=0;i<su.getFiles().getCount();i++)

{

jspsmart.SmartFile file = su.getFiles().getFile(i);

// 若文件不存在则继续

if (file.isMissing()) continue;

// 显示当前文件信息

out.println("<TABLE BORDER=1>");

out.println("<TR><TD>表单项名(FieldName)</TD><TD>"

+ file.getFieldName() + "</TD></TR>");

out.println("<TR><TD>文件长度(Size)</TD><TD>" +

file.getSize() + "</TD></TR>");

out.println("<TR><TD>文件名(FileName)</TD><TD>"

+ file.getFileName() + "</TD></TR>");

out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"

+ file.getFileExt() + "</TD></TR>");

out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"

+ file.getFilePathName() + "</TD></TR>");

out.println("</TABLE><BR>");

// 将文件另存

// file.saveAs("/upload/" + myFile.getFileName());

// 另存到以WEB应用程序的根目录为文件根目录的目录下

// file.saveAs("/upload/" + myFile.getFileName(),su.SAVE_VIRTUAL);

// 另存到操作系统的根目录为文件根目录的目录下

// file.saveAs("c://temp//" + myFile.getFileName(), su.SAVE_PHYSICAL);

}

%>

值得注意的是这个SmartRequest  有一个方法getParamterValues("String")  可以得到前一个页面定义同名对象的一个数组,例子:

<input type="text" name="test" />

<input type="text" name="test" />

<input type="text" name="test" />

到action 页用su.getRequest().getParameterValues("test") 就可以得到一个数组。
 

抱歉!评论已关闭.