Struts2实现文件上传功能

网友投稿 313 2023-02-22


Struts2实现文件上传功能

Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成。而Struts2则提供了更简单的封装。

Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此使用Struts2的文件上传功能,则需要添加两个jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar。

Struts2简单文件上传示例:

1.文件上传页面

为了能上传文件,表单的method必须设置为POST,并且enctype设置为multipart/form-data。一旦设置了enctype为multipart/form-data,此时浏览器将会采用二进制流的方式来处理表单数据。

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

<%--

Created by IntelliJ IDEA.

User: Administrator

Date: 2018/1/16

Time: 14:06

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

2.处理上传请求的Action

/**

* Description:Struts2简单文件上传

* Author: Eleven

* Date: 2018/1/24 10:39

*/

public class FileAction extends ActionSupport{

//上传文件

private File upload;

//上传文件类型

private String uploadContentType;

//上传文件名

private String uploadFileName;

//文件上传允许的类型在struts.xml中使用param标签动态设置了

private String allowTypes;

public String page(){

return "page";

}

public void upload() {

//文件上传:

//1.读取文件内容

//2.将文件内容写到指定文件

try{

System.out.println("文件上传允许的类型="+allowTypes);

String realPath = ServletActionContext.getServletContext().getRealPath("/upload");

System.out.println("项目的绝对路径="+realPath);

//创建文件保存目录

new File(realPath).mkdir();

File file = new File(realPath+"/"+uploadFileName);

//文件不存在则创建

if(!file.exists()){

file.createNewFile();

}

FileOutputStream out = new FileOutputStream(file);

FileInputStream in = new FileInputStream(upload);

byte[] buffer = new byte[1024];

int len = 0;

//边读边写 每次读取1kb 写1kb

while((len = in.read(buffer))>0){

out.write(buffer,0,len);

}

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

}catch(Exception e){

e.printStackTrace();

}

}

public File getUpload() {

return upload;

}

public void setUpload(File upload) {

this.upload = upload;

}

public String getUploadContentType() {

return uploadContentType;

}

public void setUploadContentType(String uploadContentType) {

this.uploadContentType = uploadChttp://ontentType;

}

public String getUploadFileName() {

return uploadFileName;

}

public void setUploadFileName(String uploadFileName) {

this.uploadFileName = uploadFileName;

}

public String getAllowTypes() {

return allowTypes;

}

public void setAllowTypes(String allowTypes) {

this.allowTypes = allowTypes;

}

}

如果表单中包含一个name属性为xxx的文件域,则对应的Action中需要使用三个成员变量来封装该文件域的信息。

类型为File的xxx成员变量封装了该文件域对应的文件内容。

类型为String的xxxFgeqWesKileName成员变量封装了该文件域对应的文件的文件名。

类型为String的xxxContentType成员变量封装了该文件域对应的文件的文件类型。

3.配置struts.xml

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

/WEB-INF/jsp/fileUpload.jsp

image/png,image/gif,image/jpeg

拦截器实现文件过滤

Struts2提供了一个文件上传的拦截器,fileUpload,为了让该拦截器起作用,要在action中配置拦截器引用。

配置fileUpload拦截器时,可以为其指定两个参数:

allowTypes:允许上传的文件类型,多个文件类型之间用英文逗号,隔开

maximumSize:允许上传的文件大小,单位是字节。

当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显示地为该Action配置defaultStack的拦截器引用。

struts.xml配置文件如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

image/png,image/gif,image/jpeg

2000

/WEB-INF/jsp/input.jsp

/WEB-INF/jsp/fileUpload.jsp

上面配置的文件上传的拦截器,要求文件上传的类型只能是图片文件,并且文件大小不能大于2000字节,如果上传文件太大,或者类型不符合,则将跳转到input逻辑视图。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:struts2实现简单文件下载功能
下一篇:网页支付接口开发(网站支付接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~