Struts2的文件上传

 

基于表单上传:

       注意点:

  1. 表单的enctype必须是"multipart/form-data";
  2. 表单必须使用post方式提交。
  3. 在webContent下创建一个存放文件的文件夹

Struts.xml配置

      

<package name="uploaddemo" namespace="/" extends="struts-default">

      <action name="load" class="action.UploadAction" method="upload">

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

      </action>

   </package>

jsp上传页面

<form action="load.action" method="post" enctype="multipart/form-data">

      <input type="file" name="file">

      <input type="submit" value="上传">

   </form>

Action

public class UploadAction extends ActionSupport {

   //表单name

   private String file;

   //文件名

   private String fileFileName;

   //文件类型

   private String fileContentType;

  

   //上传方法

   public String upload() throws Exception {

      HttpServletRequest request=ServletActionContext.getRequest();

      //获取上传目录

      String path=request.getRealPath("/upload");

      //输入流读取文件

      InputStream is=new FileInputStream(file);

      //开始上传文件

      OutputStream os=new FileOutputStream(new File(path,fileFileName));

      byte[] buffer=new byte[1024];

      int len=0;

      while((len=is.read(buffer))!=-1)

      {

         os.write(buffer, 0, len);

      }

      os.close();

      is.close();

      return "success";

   }

注意:上面的文件名和文件类型属性必须为fileFileName,fileContentType,原因是上传的拦截器org.apache.struts2.interceptor.FileUploadInterceptor.class里面有一段代码规定了这两个参数的名字

// inputName是表单中inputname

String contentTypeName = inputName + "ContentType";

String fileNameName = inputName + "FileName";

我在写Action的时候就是文件名写成fileName导致上传文件的时候空指针异常。

 

测试:上传一个文件

      

在tomcat部署下的项目查看文件是否已经上传

 

 

上传文件的其他设置

       参考struts2 core里的配置文件/org/apache/struts2/default.properties

设置临时目录

      

struts.multipart.saveDir=

在xml中的配置方法:

<!-- 设置临时目录 -->

   <constant name="struts.multipart.saveDir" value="f:\"></constant>

 

设置上传文件的最大值(默认2M)

struts.multipart.maxSize=2097152

在Xml配置方法

<!-- 设置文件最大值为20m 单位字节,此处必须大于等于maximumSize --> <constant name="struts.multipart.maxSize" value="20971520"/>

除了default.properties的设置还需要修改拦截器里面文件大小的配置

<action name="load" class="action.UploadAction" method="upload">

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

         <interceptor-ref name="fileUpload">

            <param name="maximumSize">20971520</param>

         </interceptor-ref>

         <!-- 引用单个拦截器后默认拦截器会失效别忘了重写引用 -->

         <interceptor-ref name="defaultStack"/>

      </action>

源码中的属性:

修改好了试试上传大点的文件

 

多个文件上传

 与上面的单个上传几乎一样,只是Action里面的3个对应的参数类型为数组

Action代码

      

//获取表单中提交的文件的数组

   private File[] file;

   //文件名数组

   private String[] fileFileName;

   //文件类型数组

   private String[] fileContentType;

  

   //上传方法

   public String execute() throws IOException {

      //创建request

      HttpServletRequest request=ServletActionContext.getRequest();

      //获取上传路径

      String path=request.getRealPath("/upload");

      //上传过程 遍历数组里面的文件,循环一次就一个文件被上传

      for(int i=0;i<file.length;i++) {

         InputStream is=new FileInputStream(file[i]);

         OutputStream os=new FileOutputStream(new File(path,fileFileName[i]));

         byte[] buffer=new byte[1024];

         int len=0;

         while((len=is.read(buffer))!=-1)

         {

            os.write(buffer, 0, len);

         }

         os.close();

         is.close();

      }

      return "success";

   }

 

   //get set方法

 

Jsp页面代码与单个文件的无异,form表单添加多个input就好了 只是input的name要一致

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值