读书人

Struts1下传文件的大小及类型的限制

发布时间: 2013-03-06 16:20:31 作者: rapoo

Struts1上传文件的大小及类型的限制

程序要求:

1.文件上传名不能为空,

2.文件上传的类型必须是java zip格式

文件上传大小必须是5M

第一种方法是通过javascript校验来限制,获取input的value然后截取扩展名进行判断即可。

第二种是根据struts2自带的fileupload拦截器中提供的allowedTypes来进行限制,步骤如下:

1 配置fileupload拦截器

struts.xml文件中的代码如下:

<struts>

<!-- 常量的配置文件 -->

<includefile="struts-constant.xml"/>

<packagename="user"namespace="/csdn"extends="struts-default">

<!-- 全局结果集 -->

<global-results>

<resultname="input">/index.jsp</result>

</global-results>

<actionname="FileAction_*"class="www.csdn.struts_upload_interceptor.action.FileAction"method="{1}">

<interceptor-refname="fileUpload">

<!-- 上传文件类型的限制 上传java,zip格式文件-->

<paramname="allowedTypes"> application/octet-stream,application/x-zip-compressed

</param>

<!-- 上传文件大小的设置以byte为单位 1M=1024KB=1024*1024B 5M=5242880B 默认为2M-->

<paramname="maximumSize">5242880</param>

</interceptor-ref>

<!-- 默认拦截器栈 -->

<interceptor-refname="defaultStack"/>

<resultname="success">/index.jsp</result>

</action>

</package>

</struts>

上面配置的是上传文件类型的限制,其实共有两个参数:

maximumSize (可选)- 这个拦截器允许的上传到action中的文件最大长度(以byte为单位).注意这个参数和在webwork.properties中定义的属性没有关系,默认2MB

allowedTypes (可选)- 以逗号分割的contentType类型列表(例如text/html),这些列表是这个拦截器允许的可以传到action中的contentType.如果没有指定就是允许任何上传类型.Tomcat/conf/web.xml文件中就有文件的类型的名称

文件大小的设置需在常量配置xml的文件中进行如下配置:

<!-- 设置文件上传的大小 value必须大于或等于拦截器中的值 -->

<constantname="struts.multipart.maxSize"value="5242880"></constant>

2 jsp页面定义如下(testFileUpload.jsp)

<body>

上传文件<br>

<hr>

错误信息:

<s:fielderror></s:fielderror><br>

action错误信息:

<s:actionerror/>

<hr>

<div>

<formaction="${pageContext.request.contextPath }/csdn/FileAction_upload.action"method="post"enctype="multipart/form-data">

文件上传:<inputname="upload"type="file"><br>

<inputtype="submit"value="上传">

</form>

</div>

</body>

添加struts2标签:

<%@ tagliburi="/struts-tags"prefix="s"%>

3 后台的FileAction声明如下

public class FileAction extends ActionSupport {

private Filefile;//上传的文件

private StringcontentType;//文件类型

private Stringfilename;//文件名

private Stringpath;

public String getPath() {

return path;

}

public void setPath(String path) {

this.path = path;

}

public void setUpload(File file) {

this.file = file;

}

public void setUploadFileName(String filename) {

this.filename = filename;

}

public String upload()

{

//创建文件路径

String path=ServletActionContext.getServletContext().getRealPath("WEB-INF/uploads");

//上传路径的文件

File pfile=new File(path);

//文件的路径创建

if(!pfile.exists())

{

pfile.mkdirs();

}

try {

FileUtils.copyFile(file,new File(pfile,System.currentTimeMillis()+"_"+filename));

System.out.println("文件上传成功。。。。。。。。。。");

returnSUCCESS;

} catch (IOException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

return INPUT;

}

public String getContentType() {

return contentType;

}

public void setContentType(String contentType) {

this.contentType = contentType;

}

}
注意:如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为

private File xxx;

private String xxxContentType;

private String xxxFileName;

同时注意大小写一定要一致

4.文件名不能为空的问题:

在FileAction文件的同目录下,建一个FileAction-validation.xml,编写代码如下:

<fieldname="upload">

<field-validatortype="requiredstring">

<paramname="trim">true</param>

<message>文件名不能为空</message>

</field-validator>

</field>

运行效果图:

1Struts1下传文件的大小及类型的限制

2.上传的文件类型不对,

Struts1下传文件的大小及类型的限制

3.文件名为空

Struts1下传文件的大小及类型的限制
出现的bug及解决:

bug:上传一个文件后,总会出现一个信息错误,即出现文件名不能为空的提示信息

bug的原因:文本框中的value值本来就是空的 所以文件名不能为空的问题不能在第4步中写,直接在Action中进行判断就可。

解决:在FileAction的upload方法中进行以下判断:

if("".equals(file) || file==null)
{
System.out.println("文件名不能为空");
}

Struts1下传文件的大小及类型的限制

再运行,程序则正常显示了,不会再出现文件名不能为空的信息。

读书人网 >软件架构设计

热点推荐