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" />
    
  • 相关阅读:
    Git:五、操作远程仓库
    Git:四、连接GitHub远程仓库
    Git:三、工作原理
    Git:二、本地文件操作
    Git:一、简介&安装Git 2.20.1——Mac&Win
    Web前端:博客美化:四、网易云音乐单曲播放器
    设计模式之代理模式(proxy pattern)
    OpenCC的编译与多语言使用
    唯一标识符漫谈
    vscode local attach 和 remote debug
  • 原文地址:https://www.cnblogs.com/caroline4lc/p/4211529.html
Copyright © 2011-2022 走看看