Struts2之文件上传

        在变成过程中难免会遇到文件上传和下载功能,比方说我们所做的系统中有些需要上传附件文档。对于这些,Struts2已经帮我们封装好了,只需要按照一定规则来就可以。下面先来看看文件上传功能:
一、单个文件上传:
        1、前台:
                 1)上传文件页面(在这特别注意,上传文件的form的enctype必须是multipart/form-data): upload.jsp
                 < form action="fileUpload.action" method="post" enctype="multipart/form-data" >
            username:<input type="text" name="username"><br>
            file:<input type="file" name="file"><br>
            <input type="submit" value="submit">
       </form>
    2)上传后跳转页面:uploadResult.jsp
        < body >
            username:<s:property value="username" /><br>
            name:<s:property value="fileFileName" /><br>
            type:<s:property value="fileContentType" /><br>
        </body>  
    2、对应的struts.xml文件中的Action(和平时配置的action是一个样子的)
        < struts >
         <!-- 设置文件上传临时目录和上传文件的大小限制 -->
        <constant name="struts.multipart.saveDir" value="/tmp"/> 
        <constant name="struts.multipart.maxSize" value="1048576000"/>

        <package name="struts2" extends="struts-default">
            <action name="fileUpload" class="com.tgb.struts2.UploadAction">
                <result name="success">/fileUploadResult.jsp</result>
           </action>      
        </package>
   </struts>
    3、Action类:UploadAction类
    public class UploadAction extends ActionSupport {
        private String username;
        //Struts封装好的,直接用下面的属性即可.
        private File file;
        private String fileFileName;
        private String fileContentType;
        //get、set方法省略...

        @Override
        public String execute() throws Exception {
            //获取上传文件的路径
            String root=ServletActionContext.getRequest().getRealPath("/upload");

            //读取文件内容
            InputStream is=new FileInputStream(file);
            //将内容写到临时文件destFile中
            File destFile=new File(root, fileFileName);
            //将文件写到磁盘上
            OutputStream os=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;
        }
    }

    上面讲述的是单个文件的上传,除此之外,如果遇到批量上传的话,不必担心,来一个循环就帮我们很好的解决了该问题,下面来看多个文件上传的例子

二、多个文件上传
    1、前台:
        1)fileUpload.jsp
          < form action="fileUpload2.action" method="post" enctype="multipart/form-data" >
        username:<input type="text" name="username"><br>
        file:<input type="file" name="file"><br>
        file2:<input type="file" name="file"><br>
        file3:<input type="file" name="file"><br>
        <input type="submit" value="submit">
    </form>
        2)fileUploadResult.jsp
<body>
    username:<s:property value="username"/> <br>
    <s:iterator value="fileFileName" id="f">
        <s:property value="#f"/><br>
    </s:iterator>
</body>  
    2、对应的struts.xml文件中的Action        
        < struts >
       <!-- 设置文件上传临时目录和上传文件的大小限制 -->
       <constant name="struts.multipart.saveDir" value="/tmp"/> 
       <constant name="struts.multipart.maxSize" value="1048576000"/>

       <package name="struts2" extends="struts-default">
           <action name="fileUpload2" class="com.tgb.struts2.UploadAction2">
               <result name="success">/fileUploadResult2.jsp</result>
           </action>
       </package>
   </struts>
    3、UploadAction类
    public class UploadAction2 extends ActionSupport {
        private String username;
        private List<File> file;
        private List<String> fileFileName;
        private List<String> fileContentType;
        //get、set方法省略...
    
        @Override
        public String execute() throws Exception {
            for (int i = 0; i < file.size(); i++) {
                String root=ServletActionContext.getRequest().getRealPath("/upload");
                InputStream is=new FileInputStream(file.get(i));
                File destFile=new File(root, fileFileName.get(i));
                OutputStream os=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;
        }
    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值