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.jspStruts2实现文件上传功能