`
wcxt2012
  • 浏览: 23724 次
  • 性别: Icon_minigender_1
  • 来自: 甘肃
社区版块
存档分类
最新评论

struts2之多个文件上传

阅读更多

struts2之多个文件上传

通过3种方式模拟多个文件上传,效果如下所示

         

目录结构

 

新建Action

第一种方式

复制代码
package com.ljq.action;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings(
"serial")
publicclass UploadAction extends ActionSupport{

private File[] image; //上传的文件
private String[] imageFileName; //文件名称
private String[] imageContentType; //文件类型

public String execute() throws Exception {
ServletActionContext.getRequest().setCharacterEncoding(
"UTF-8");
String realpath
= ServletActionContext.getServletContext().getRealPath("/images");
System.out.println(realpath);
if (image !=null) {
File savedir
=new File(realpath);
if(!savedir.getParentFile().exists())
savedir.getParentFile().mkdirs();
for(int i=0;i<image.length;i++){
File savefile
=new File(savedir, imageFileName[i]);
FileUtils.copyFile(image[i], savefile);
}
ActionContext.getContext().put(
"message", "文件上传成功");
}
return"success";
}

public File[] getImage() {
return image;
}

publicvoid setImage(File[] image) {
this.image = image;
}

public String[] getImageContentType() {
return imageContentType;
}

publicvoid setImageContentType(String[] imageContentType) {
this.imageContentType = imageContentType;
}

public String[] getImageFileName() {
return imageFileName;
}

publicvoid setImageFileName(String[] imageFileName) {
this.imageFileName = imageFileName;
}




}
复制代码

                   

第二种方式

复制代码
package com.ljq.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
/**
* 使用数组上传多个文件
*
*
@author ljq
*
*/
@SuppressWarnings(
"serial")
publicclass UploadAction2 extends ActionSupport{
private File[] image; //上传的文件
private String[] imageFileName; //文件名称
private String[] imageContentType; //文件类型
private String savePath;

@Override
public String execute() throws Exception {
ServletActionContext.getRequest().setCharacterEncoding(
"UTF-8");
//取得需要上传的文件数组
File[] files = getImage();
if (files !=null&& files.length >0) {
for (int i =0; i < files.length; i++) {
//建立上传文件的输出流, getImageFileName()[i]
System.out.println(getSavePath() +"\\"+ getImageFileName()[i]);
FileOutputStream fos
=new FileOutputStream(getSavePath() +"\\"+ getImageFileName()[i]);
//建立上传文件的输入流
FileInputStream fis =new FileInputStream(files[i]);
byte[] buffer =newbyte[1024];
int len =0;
while ((len=fis.read(buffer))>0) {
fos.write(buffer,
0, len);
}
fos.close();
fis.close();
}
}
return SUCCESS;
}

public File[] getImage() {
return image;
}

publicvoid setImage(File[] image) {
this.image = image;
}

public String[] getImageFileName() {
return imageFileName;
}

publicvoid setImageFileName(String[] imageFileName) {
this.imageFileName = imageFileName;
}

public String[] getImageContentType() {
return imageContentType;
}

publicvoid setImageContentType(String[] imageContentType) {
this.imageContentType = imageContentType;
}

/**
* 返回上传文件保存的位置
*
*
@return
*
@throws Exception
*/
public String getSavePath() throws Exception {
return ServletActionContext.getServletContext().getRealPath(savePath);
}

publicvoid setSavePath(String savePath) {
this.savePath = savePath;
}


}
复制代码

            

第三种方式

复制代码
package com.ljq.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
* 使用List上传多个文件
*
*
@author ljq
*
*/
@SuppressWarnings(
"serial")
publicclass UploadAction3 extends ActionSupport {
private List<File> image; // 上传的文件
private List<String> imageFileName; // 文件名称
private List<String> imageContentType; // 文件类型
private String savePath;

@Override
public String execute() throws Exception {
ServletActionContext.getRequest().setCharacterEncoding(
"UTF-8");
// 取得需要上传的文件数组
List<File> files = getImage();
if (files !=null&& files.size() >0) {
for (int i =0; i < files.size(); i++) {
FileOutputStream fos
=new FileOutputStream(getSavePath() +"\\"+ getImageFileName().get(i));
FileInputStream fis
=new FileInputStream(files.get(i));
byte[] buffer =newbyte[1024];
int len =0;
while ((len = fis.read(buffer)) >0) {
fos.write(buffer,
0, len);
}
fis.close();
fos.close();
}
}
return SUCCESS;
}

public List<File> getImage() {
return image;
}

publicvoid setImage(List<File> image) {
this.image = image;
}

public List<String> getImageFileName() {
return imageFileName;
}

publicvoid setImageFileName(List<String> imageFileName) {
this.imageFileName = imageFileName;
}

public List<String> getImageContentType() {
return imageContentType;
}

publicvoid setImageContentType(List<String> imageContentType) {
this.imageContentType = imageContentType;
}

/**
* 返回上传文件保存的位置
*
*
@return
*
@throws Exception
*/
public String getSavePath() throws Exception {
return ServletActionContext.getServletContext().getRealPath(savePath);
}

publicvoid setSavePath(String savePath) {
this.savePath = savePath;
}

}
复制代码

              

struts.xml配置文件

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
-->
<constant name="struts.action.extension" value="do"/>
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false"/>
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true"/>
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple"/>
<!--<constant name="struts.objectFactory" value="spring"/>-->
<!--解决乱码 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.multipart.maxSize" value="10701096"/>

<package name="upload" namespace="/upload"extends="struts-default">
<action name="*_upload"class="com.ljq.action.UploadAction" method="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>
<package name="upload1" namespace="/upload1"extends="struts-default">
<action name="upload1"class="com.ljq.action.UploadAction2" method="execute">
<!-- 要创建/image文件夹,否则会报找不到文件 -->
<param name="savePath">/image</param>
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>
<package name="upload2" namespace="/upload2"extends="struts-default">
<action name="upload2"class="com.ljq.action.UploadAction3" method="execute">
<!-- 要创建/image文件夹,否则会报找不到文件 -->
<param name="savePath">/image</param>
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>
复制代码

           

上传表单页面upload.jsp

复制代码
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do-->
<!-- ${pageContext.request.contextPath}/upload1/upload1.do-->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do-->
<!---->
<form action="${pageContext.request.contextPath}/upload2/upload2.do" enctype="multipart/form-data" method="post">
文件1:
<input type="file" name="image"><br/>
文件2:
<input type="file" name="image"><br/>
文件3:
<input type="file" name="image"><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
复制代码

显示页面message.jsp

复制代码
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'message.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
上传成功
<br/>
<s:debug></s:debug>
</body>
</html>

 

文章转载路径:http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990688.html

分享到:
评论

相关推荐

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    struts2实现的多个文件上传

    下面将详细阐述如何使用Struts2来实现多个文件的上传。 首先,理解文件上传的基本原理。在HTTP协议中,文件上传通常通过multipart/form-data编码类型来实现。这种编码方式将表单数据分割成多个部分,每部分包含一个...

    struts2实现多文件上传下载

    1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有...

    struts2框架下的文件上传

    Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...

    Struts2实现单个文件多个文件上传与下载-多个拦截器

    本项目主要展示了如何在Struts2框架下实现单个文件和多个文件的上传及下载,并且运用了多个拦截器来增强功能和安全性。 首先,让我们详细了解一下文件上传的过程。在Struts2中,文件上传主要依赖于`struts2-...

    struts1上传多个文件同时

    2. **后端配置**:在Struts1的配置文件(struts-config.xml)中,你需要为每个文件上传动作创建一个单独的ActionMapping,因为Struts1默认的FileUpload拦截器只能处理单个文件。每个ActionMapping对应一个ActionForm...

    swfuplaod+struts2实现多文件上传

    结合Struts2,一个流行的Java Web框架,可以构建出高效、用户友好的文件上传功能。下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用...

    struts2实现多文件上传功能

    通过组合使用Struts2的配置、Action类和HTML表单,我们可以轻松地处理多个文件的上传操作。这个过程中的关键知识点包括:Struts2拦截器、文件上传配置、Action类设计、HTML表单的构建以及服务器端的文件处理逻辑。

    struts2实现文件上传下载

    首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List&lt;FileInfo&gt;`类型的字段,用于接收上传的文件...

    一个Struts1多文件上传实例(附Form中传List示例)

    2. **多文件上传**: 在Struts1中,多文件上传通常使用Apache的Commons FileUpload库来处理。该库提供了一种处理multipart/form-data类型请求的方式,这种类型的请求通常用于文件上传。要实现多文件上传,需要在...

    struts2多文件的上传

    在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts2中的Action类和Interceptor(拦截器)。Action类是处理用户请求的核心,而Interceptor则用于处理...

    struts2 多个文件上传 插件goouploader

    Goouploader插件允许用户在Web表单中选择多个文件进行同时上传,极大地提高了用户体验。 在Struts2中,传统的文件上传是通过`&lt;s:file&gt;`标签实现的,但只支持单个文件上传。Goouploader插件则提供了更强大的多文件...

    Struts2实现多个文件上传

    在Struts2中实现多个文件上传是一项常见的需求,尤其在处理用户需要上传多张图片或者文档的场景下。本篇文章将详细讲解如何利用Struts2实现这个功能,并纠正描述中提到的一个小错误。 首先,我们要明白文件上传的...

    struts1 多个文件上传

    这篇内容将深入探讨Struts1中的单个文件上传和多个文件上传的实现机制。 首先,我们来看单个文件上传。在Struts1中,要实现文件上传,你需要在表单中包含一个`&lt;input type="file"&gt;`标签,并在ActionForm中创建对应...

    struts2实现文件上传(单个+多个文件上传

    ### Struts2实现文件上传(单个+多个文件上传) #### 一、单个文件上传 在Struts2框架中实现文件上传是一项常见的需求。本文将详细介绍如何在Struts2中实现单个文件的上传。 ##### JSP 页面设计 首先,我们需要在...

    Struts2实现文件上传

    在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库,这是一个专门用于处理HTTP多部分请求(multipart/form-data)的工具。以下是一些关键知识点: 1. **配置Struts2插件**: 首先,需要在Struts2的...

    Struts2实现Uploadify多文件上传

    这个Action类需要继承`org.apache.struts2.dispatcher.multipart.MultiPartRequest`,以便处理多个文件。同时,定义相应的私有属性,这些属性将用于接收上传的文件,并使用`@RequestParam`注解进行注解。 2. **...

    Struts2实现多文件上传

    在Struts2中,实现多文件上传功能是常见的需求,尤其在处理用户需要上传多个文件的场景下,如上传图片、文档等。本篇文章将详细介绍如何使用Struts2来实现这一功能。 首先,我们需要理解Struts2的上传机制。在...

    struts多文件上传

    在Struts1.2版本中,实现多文件上传是一项常见的需求,它允许用户在一次提交中上传多个文件,这对于数据交互、资源分享等场景非常实用。在本教程中,我们将深入探讨如何在Struts1.2中实现这一功能。 首先,理解多...

Global site tag (gtag.js) - Google Analytics