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="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" />
时间: 2024-10-13 23:39:52

Struts1文件上传、单文件、多文件上传【Struts1】的相关文章

HTML 文件类表单元素如何限制上传类型,Accept属性设置

需求描述:简单的控制file的选择类型 解决方法:使用HTML  input file 的accept属性控制 实例: <form action="demo_form.asp"> <input type="file" name="pic" accept="image/gif,image/jpg" /> <input type="submit" /> </form&g

WebApi发送HTML表单数据:文件上传与多部分MIME

5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/2826230.html By Mike Wasson|June 21, 2012作者:Mike Wasson | 日期:2012-6-21 Part 2: File Upload and Multipart MIME第2部分:文件上传与多部分MIME This tutorial shows how to

为什么上传文件的表单里面要加一个属性ENCTYPE=MULTIPART/FORM-DATA?

首先知道enctype这个属性管理的是表单的MIME编码.共有三个值可选:1.application/x-www-form-urlencoded2.multipart/form-data3.text/plain其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码.例如我们在AJAX中见过xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlen

上传文件form表单enctype=&quot;multipart/form-data&quot;传值解决办法(代原代码)

最近做的一个项目里遇到一个问 题,就是如何在上传文件的表单里传递其它的变量,因为一但form表单用了enctype="multipart/form-data"类型后,所有的值 都是以二进制进行传递的,所以当我们想取出这个表单里传递过来的其它变量的时候,就会遇到一个问题,那就是用request取不到传递过来的变量.在网上 找了很多资料,也都是大至说一下,在这里我就借花献佛发个完整的原代码解决这个问题!!! 工程目录如下: 两个jar可以去apache上下载: http://commons

(转)WebApi发送HTML表单数据:文件上传与多部分MIME

5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/2826230.html By Mike Wasson|June 21, 2012作者:Mike Wasson | 日期:2012-6-21 Part 2: File Upload and Multipart MIME第2部分:文件上传与多部分MIME This tutorial shows how to

? 为什么上传文件的表单里要加个属性enctype----摘录

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可

为什么上传文件的表单里要加个属性enctype

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可

fileupload form表单提交(包括文件上传)

需要的jar包:commons-fileupload-1.3.1.jar 示例代码: package com.expai.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpS

html5表单上传控件Files筛选指定格式的文件:accept属性过滤excel文件

摘自:http://blog.csdn.net/jyy_12/article/details/9851349 (IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持.) 1.允许上传文件数量 允许选择多个文件:<input type="file" multiple> 只允许上传一个文件:<input  type="file" single> 2.上传指定的文件格式 <input type="file" acce

form表单系列中文件上传及预览

文件上传及预览 Form提交 Ajax 上传文件 时机: 如果发送的[文件]:->iframe, jQurey(),伪Ajax 预览 import os img_path = os.path.join('static/img', fafafa.name) with open(img.path, 'wb') as f: for item in fafafa.chunks(): f.write(item) function iframeSubmit(){ $('#ifm1').load(functi