Struts1文件上传、单文件、多文件上传【Struts1】

1、单文件上传

1)JSP页面(singleFileUpload.jsp)

<%@page pageEncoding = "UTF-8"%>  
  
<h1>  
    文件上传  
</h1>  
<hr />  
<form action="upload.action" method="post" enctype="multipart/form-data">  
    name:  
    <input type="text" name="name" />  
    <br />  
    upload:  
    <input type="file" name="file" />  
    <br />  
    <input type="submit" value="上传" />  
</form>  

//操作点:enctype="multipart/form-data"

2)Form(UploadForm)

package fileUpload.singleFileUpload.form;  
  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.upload.FormFile;  
  
public class UploadForm extends ActionForm {  
  
    private static final long serialVersionUID = 1L;  
  
    private String name;  
      
    private FormFile file;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public FormFile getFile() {  
        return file;  
    }  
  
    public void setFile(FormFile file) {  
        this.file = file;  
    }  
}  
//操作点:Struts1提供了一个FormFile类来处理文件上传操作,另外注意,属性name,file名字必须与jsp页面一致,否则会报空指针。

 3)Action(UploadAction)

 

package fileUpload.singleFileUpload.action;  
  
import java.io.FileOutputStream;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.apache.struts.action.Action;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  
import org.apache.struts.upload.FormFile;  
  
import fileUpload.singleFileUpload.form.UploadForm;  
  
  
public class UploadAction extends Action {  
  
// @Override  
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
   throws Exception { UploadForm uf = (UploadForm)form; String name = uf.getName(); FormFile file = uf.getFile(); System.out.println("name=" + name); String filename = file.getFileName(); System.out.println("fileName=" + filename); FileOutputStream fos = new FileOutputStream("d:\\["+name+"]" + filename); //创建输出流 fos.write(file.getFileData()); //写入 fos.flush();//释放 fos.close(); //关闭 return mapping.findForward("success"); } }
//操作点:FormFile类的方法

 

4)Struts配置文件(struts-config.xml)

<!-- 配置 单个上传 -->  
<form-bean name="uploadForm" type="fileUpload.singleFileUpload.form.UploadForm" /> 
<!-- 配置 单个上传 -->  
<action path="/upload" type="fileUpload.singleFileUpload.action.UploadAction" name="uploadForm" scope="request">  
    <forward name="success" path="/singleFileUpload.jsp" />  
</action>  
<!-- 配置文件上传大小 -->  
<!-- 规定了最大上传大小是2M,如果设置成-1则大小无限制了 -->  
<controller maxFileSize="2M" />  
<!--操作点:controller maxFileSize用来配置上传文件的大小,可根据实际情况配置,设置成-1则表示无限制。其位置必须放在</action-mappings>和<message-resources>之间-->

2、多文件上传

1)JSP页面(mutityFileUpload.jsp)(从网上获得的代码,可增可减,不错)

<%@ page pageEncoding="utf-8"%>  
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
<html>  
    <head>  
        <title>上传任意多个文件(总大小不能超过2M)</title>  
        <script language="javascript">  
              // 在DOM中插入一个上传文件列表项(div元素)和一个<input type="file"/>元素  
              function insertNextFile(obj)   
              {   
            // 获取上传控制个数  
                  var childnum = document.getElementById("files").getElementsByTagName("input").length;         
                  var id = childnum - 1;  
                  var fullName = obj.value;  
                  // 插入<div>元素及其子元素  
                  var fileHtml = '';  
                  fileHtml += '<div  id = "file_preview' + id + '" style ="border-bottom: 1px solid #CCC;">';  
                  fileHtml += '<img  width =30 height = 30 src ="images/file.gif" title="' + fullName + '"/>';  
                  fileHtml += '<a href="javascript:;" onclick="removeFile(' + id + ');">删除</a>   ';  
                  fileHtml += fullName.substr(fullName.lastIndexOf('\\')+1) +'  </div>';  
                
                  var fileElement = document.getElementById("files_preview");  
                  fileElement.innerHTML = fileElement.innerHTML + fileHtml;      
                  obj.style.display = 'none';   // 隐藏当前的<input type=”file”/>元素  
                  addUploadFile(childnum);  // 插入新的<input type=”file”/>元素  
              }  
              //  插入新的<input type=”file”/>元素,适合于不同的浏览器(包括IE、FireFox等)  
              function addUploadFile(index)  
              {  
                  try  // 用于IE浏览器  
                  {     
                      var uploadHTML = document.createElement( "<input type='file' id='file_" + index +   
                                              "' name='file[" + index + "]' onchange='insertNextFile(this)'/>");  
                      document.getElementById("files").appendChild(uploadHTML);  
                  }  
                  catch(e)  // 用于其他浏览器  
                  {   
                      var uploadObj = document.createElement("input");  
                      uploadObj.setAttribute("name", "file[" + index + "]");  
                      uploadObj.setAttribute("onchange", "insertNextFile(this)");  
                      uploadObj.setAttribute("type", "file");  
                      uploadObj.setAttribute("id", "file_" + index);  
                      document.getElementById("files").appendChild(uploadObj);  
                  }  
              }  
              function removeFile(index)  // 删除当前文件的<div>和<input type=”file”/>元素  
              {  
                  document.getElementById("files_preview").removeChild(document.getElementById("file_preview" + index));   
                  document.getElementById("files").removeChild(document.getElementById("file_" + index));      
              }  
              function showStatus(obj)  // 显示“正在上传文件”提示信息  
              {  
                document.getElementById("status").style.visibility="visible";  
              }  
        </script>  
    </head>  
    <body>  
        <html:form enctype="multipart/form-data" action="multiUpload">  
            <span id="files"> <%--  在此处插入用于上传文件的input元素 --%>   
               <input type="file" id="file_0" name="file[0]" onchange="insertNextFile(this)" /> </span>    
               <html:submit value=" 上传 " onclick="showStatus(this);" />  
        </html:form>  
        <p>  
        <div id="status" style="visibility: hidden; color: Red">  
            正在上传文件  
        </div>  
        <p>  
            <%--  在此处用DOM技术插入上传文件列表项  --%>  
        <div id="files_preview"  
            style="width: 500px; height: 500px; overflow: auto"></div>  
    </body>  
</html>  

2)Form(UploadMoreForm)

package fileUpload.mutityFileUpload.form;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.upload.FormFile;  
  
public class UploadMoreForm extends ActionForm{  
  
    private static final long serialVersionUID = 1L;  
    private List<FormFile> myFiles = new ArrayList<FormFile>();  // 用于保存不定数量的FormFile对象  
        
    public FormFile getFile(int i)  // 索引属性  
    {  
        return myFiles.get(i);  
    }  
    public void setFile(int i, FormFile myFile)  // 索引属性  
    {  
        if (myFile.getFileSize() > 0)  // 只有上传文件的字节数大于0,才上传这个文件  
        {  
            myFiles.add(myFile);  
        }  
    }  
    public int getFileCount()  // 获得上传文件的个数  
    {  
        return myFiles.size();  
    }  
  
  
}  

3)Action(UploadMoreAction)

package fileUpload.mutityFileUpload.action;  
  
import java.io.FileOutputStream;  
  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.struts.action.Action;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  
import org.apache.struts.upload.FormFile;  
  
import fileUpload.mutityFileUpload.form.UploadMoreForm;  
  
public class UploadMoreAction extends Action {  
      
    public ActionForward execute(ActionMapping mapping, ActionForm form,  
            HttpServletRequest request, HttpServletResponse response)  
    {  
        UploadMoreForm umForm = (UploadMoreForm) form;  
        int count = 0;  
        try  
        {  
            count = umForm.getFileCount();   // 获得上传文件的总数  
            for (int i = 0; i < count; i++)  
            {  
                FormFile file = umForm.getFile(i);   
                System.out.println(file.getFileName());  
                FileOutputStream fos = new FileOutputStream("d:\\" + file.getFileName()); //创建输出流  
                fos.write(file.getFileData()); //写入  
                fos.flush();//释放  
                fos.close(); //关闭  
                  
            }  
        }  
        catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
  
}  

4)Struts配置文件(struts-config.xml)

<!-- 配置 多个上传 -->  
<form-bean name="uploadMoreForm" type="fileUpload.mutityFileUpload.form.UploadMoreForm" /> 
<!-- 配置 多个上传 -->  
<action path="/multiUpload" type="fileUpload.mutityFileUpload.action.UploadMoreAction" name="uploadMoreForm" scope="request">  
    <forward name="success" path="/mutityFileUpload.jsp" />  
</action> 
<!-- 配置文件上传大小 -->  
<!-- 规定了最大上传大小是2M,如果设置成-1则大小无限制了 -->  
<controller maxFileSize="-1" />  

 

posted @ 2015-03-08 19:13  贝壳风铃  阅读(345)  评论(0)    收藏  举报