struts2文件上传

1.     Struts2在进行文件上传操作时,实际上是上是通过两个步骤实现的。

a)       首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录中,如果该键所指定的目录不存在,那么就保到javax.servlet.context.tempdir环境变量所指定的目录中。

b)       Action中所定义的File类型的成员变量实际上指向的是临时目录中的临时文件,然后在服务器端通过IO的方式将临时文件写入到指定的服务器端目录中。

2.     文件上传大小控制

a)       在struts.properties中设置

struts.multipart.maxSize=10485760

b)       在struts.xml中配置属性

<constant name="struts.multipart.maxSize" value="10485760"></constant>

3. Struts2的文件上传实际上是通过FileUpLoadInerceptor拦截器来处理的。

例1,使用struts2实现文件上传。

a)建立文件上传界面upfile.jsp

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

        username:<input type="text" name="username"/><br/>

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

  <input type="submit" value="submit"/>

  </form>

b)在struts.xml中配置对应的action类

<action name="fileUpAction" class="com.ebuair.struts2.FileUpAction">

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

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

       </action>

c)建立处理文件上传的处理类FileUpAction

  private String username;

        private File file;

        private String fileFileName; //固定的命名规则

        private String fileContentType; //固定的命名规则

......//get、set方法

       @Override

       public String execute()throws Exception {

              String root =ServletActionContext.getRequest().getRealPath("/upfile");

              InputStream is = new FileInputStream(file);

              File destFile = newFile(root,fileFileName);

              System.out.println("fileContextType:"+ fileContentType);

              OutputStream os =new FileOutputStream(destFile);

              byte[] buffer = newbyte[400];

              int length = 0;

              while(-1 != (length= is.read(buffer))){

                     os.write(buffer,0,length);

              }

              is.close();

              os.close();

         return SUCCESS;

d)显示文件上传的结果页面fileuploadresult.jsp

  username: <s:property value="username"/><br/>

             fileName: <s:propertyvalue="fileFileName"/><br/>

       fileContentType:<s:property value="fileContentType"/>

例2,使用struts2实现多文件上传

a)建立多文件上传界面upfiles.jsp

 <formaction="filesUpAction" method="post"enctype="multipart/form-data" >

              username: <inputtype="text" name="username"/><br/>

              file1: <inputtype="file" name="file"/><br/>

              file2: <inputtype="file" name="file"/><br/>

              file3: <inputtype="file" name="file"/><br/>

              <inputtype="submit" value="submit"/>"

  </form>

f) 在struts.xml中配置对应的action类

  <action name="filesUpAction"class="com.ebuair.struts2.FilesUpAction">

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

                     <result name="input">/upfiles.jsp</result>

         </action>

g)建立处理文件上传的处理类FilesUpAction

  private String username;

       List<File> file ;

       List<String>fileFileName;

       List<String>fileContentType;

       @Override

       public String execute()throws Exception {

              String root =ServletActionContext.getRequest().getRealPath("/upfile");

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

                     InputStreamis = new FileInputStream(file.get(i));

                     File destFile= new File(root,fileFileName.get(i));

                     OutputStreamos = new FileOutputStream(destFile);


                     byte[] buffer= new byte[400];

                     int length =0;

                     while(-1 !=(length = is.read(buffer))){

                            os.write(buffer,0,length);

                     }

                     is.close();

                     os.close();

              }

              return SUCCESS;

  }

h)显示文件上传的结果页面fileuploadresulst.jsp

  username: <s:propertyvalue="username"/><br/>

               <s:iterator value="fileFileName" id="fileName"> <!-- 迭代-->

                     fileName:<s:property value="#fileName"/><br/>

              </s:iterator>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值