您的位置:首页 > 编程语言 > Java开发

Struts2之文件上传

2016-01-25 19:37 417 查看
        在变成过程中难免会遇到文件上传和下载功能,比方说我们所做的系统中有些需要上传附件文档。对于这些,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;
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SSH struts2.0