zoukankan      html  css  js  c++  java
  • Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘:

     Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/details/7031785

    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=" 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" />
    
  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/caroline4lc/p/4211529.html
Copyright © 2011-2022 走看看