将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" />

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

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

    需求描述:简单的控制file的选择类型 解决方法:使用HTML  input file 的accept属性控制 实例: <form action="demo_form.asp" ...

  2. SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)

    文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFil ...

  3. 为什么上传文件的表单里面要加一个属性enctype=multipart/form-data?

    首先知道enctype这个属性管理的是表单的MIME编码.共有三个值可选:1.application/x-www-form-urlencoded2.multipart/form-data3.text/ ...

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

    为什么上传文件的表单里要加个属性enctype 上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上 ...

  5. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

  6. ng-file-upload(在单文件选择,并且通过点击“上传”按钮上传文件的情况下,如何在真正选择文件之前保留上一文件信息?)

    文章前面研究ng-file-upload可能涉及指令: You can use ng-model or ngf-change instead of specifying function for ng ...

  7. PHP实现单文件、多文件上传 封装 面向对象实现文件上传

    文件上传配置 客户端配置 1.表单页面 2.表单的发送方式为post 3.添加enctype = "multipart/form-data" <form action=&qu ...

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

    5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...

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

    5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...

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

    上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什 ...

随机推荐

  1. python继承的实例

    class SchoolMember(object):#定义学校 member=0#默认成员为0个 amount=0#默认学费为0元 def __init__(self,name,age,sex):# ...

  2. pyhton字符编码问题--decode和encode方法

    1  decode和encode方法 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成uni ...

  3. C++通过Callback向C#传递数据,注意问题

    转载:出处 现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从 ...

  4. linux命令学习-2-dmesg

    DMESG NAME dmesg - print or control the kernel ring buffer(打印或者控制内核环缓冲) Usage: dmesg [options] Optio ...

  5. JNI介绍(转)

    源:JNI介绍 JNI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的An ...

  6. Android 屏幕适配方案(转载)

    3.百分比的引入 1.引入 其实我们的解决方案,就是在项目中针对你所需要适配的手机屏幕的分辨率各自简历一个文件夹. 如下图: 然后我们根据一个基准,为基准的意思就是: 比如480*320的分辨率为基准 ...

  7. jstree使用小结(二)

    继续上一篇: 1.数据 按照官网的json数据返回格式: 有两种格式,我使用的格式如下: $('#jstree1').jstree({ 'core' : { 'data' : [ { "id ...

  8. xcode调试

    reference:http://www.cnblogs.com/ylkk_925/p/3238171.html 1.添加异常断点,快速定位抛出异常的代码位置,帮助快速解决Bug.(PS:可以在LLD ...

  9. GP项目总结(一)

    1.使用activity渲染不同的View时,两种方法: (1.)自定义两个不同的View,然后在mainActivity里根据不同的数据使用不同的View,通过addView()来Activity里 ...

  10. iOS bug 之 H5 页面没有弹出提示框

    描述:在安卓上有提示框,但是在iOS上没有提示框. step 1: 失误,是我没有在正确的位置设置网址. step 2: 修改之后,测试页能弹出提示框,但是正式的页面没有提示框. step 3: 我输 ...