Struts2实现文件上传功能

  

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

  

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

  

<强> Struts2简单文件上传示例:

  

1。文件上传页面

  

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

     =& lt; % @ taglib前缀“s”uri="/struts-tags " %比;   & lt; %——   由IntelliJ IDEA。   用户:管理员   日期:2018/1/16   时间:14:06   改变这个模板使用文件| |设置文件模板。   ——%比;   % @ & lt;页面contentType=" text/html; charset=utf - 8”语言=癹ava”%比;   & lt; html>   & lt; head>   & lt; title> Struts2简单文件上传& lt;/title>   & lt;/head>   & lt; body>   & lt;销售:表单动作=" file_upload " method=" POST " enctype=岸嗖糠?格式”比;   & lt;销售:文件名称=吧洗北昵?把≡裎募?比;   & lt;销售:提交价值=" https://www.yisu.com/zixun/上传”/比;   & lt;/s: form>   & lt;/body>   & lt;/html>   之前      

2。处理上传请求的行动

     /* *   *描述:Struts2简单文件上传   *作者:11   *日期:2018/1/24 39   */公开课FileAction延伸ActionSupport {//上传文件   私人文件上传;//上传文件类型   私人字符串uploadContentType;//上传文件名   私人字符串uploadFileName;//文件上传允许的类型在struts.xml中使用参数标签动态设置了   私人字符串allowTypes;      公共字符串页面(){   返回“页面”;   }      公共空间上传(){//文件上传://1 .读取文件内容//2 .将文件内容写到指定文件   尝试{   System.out.println(“文件上传允许的类型=" + allowTypes);   字符串realPath=ServletActionContext.getServletContext () .getRealPath("/上传");   System.out.println(“项目的绝对路径=" + realPath);//创建文件保存目录   新文件(realPath) .mkdir ();   文件文件=新文件(realPath + " + uploadFileName);//文件不存在则创建   如果(! file.exists ()) {   file.createNewFile ();   }   FileOutputStream=新FileOutputStream(文件);   FileInputStream=新FileInputStream(上传);   byte[]新字节缓冲区=[1024];   int len=0;//边读边写每次读取1 kb写1 kb   而((len=in.read(缓冲))在0){   out.write(缓冲区,0,len);   }   System.out.println(“文件上传成功…”);   }捕捉(异常e) {   e.printStackTrace ();   }      }      公共文件getUpload () {   返回上传;   }      公共空间setUpload(文件上传){   这一点。上传=上传;   }      公共字符串getUploadContentType () {   返回uploadContentType;   }      公共空间setUploadContentType(字符串uploadContentType) {   这一点。uploadContentType=uploadContentType;   }      公共字符串getUploadFileName () {   返回uploadFileName;   }      公共空间setUploadFileName(字符串uploadFileName) {   这一点。uploadFileName=uploadFileName;   }      公共字符串getAllowTypes () {   返回allowTypes;   }      公共空间setAllowTypes(字符串allowTypes) {   这一点。allowTypes=allowTypes;   }   }      之前      

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

  

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

  

类型为字符串的xxxFileName成员变量封装了该文件域对应的文件的文件名。

  

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

  

3。配置struts.xml

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; !DOCTYPE struts公共   ”——//Apache软件基金会//DTD Struts配置2.3//EN”   “http://struts.apache.org/dtds/struts-2.3.dtd”在      & lt; struts>   name=" struts.enable & lt;常数。DynamicMethodInvocation " value=" https://www.yisu.com/zixun/false "/比;   & lt;常数名称=" struts.devMode " value=" https://www.yisu.com/zixun/true "/比;      & lt;包名称==?薄澳稀泵瓶占淅┱?“struts-default”比;      & lt; !——文件上传——比;   & lt;动作名称==癳leven.action“file_ *”类。FileAction”方法=皗1}”在   & lt;结果名称="页面"在/web - inf/jsp/fileUpload.jsp

Struts2实现文件上传功能