Struts2中实现多文件上传功能

上篇理了一下Struut 2实现文件上传功能的思路,下面接着来看一下多文件上传是如何实现的。

1、 多文件上传也是在单文件上传的基础上,稍微修改一下数据类型和实现方法,即可完成,思路都是大致相同的。

2、 仍然是使用上一篇的项目结构和代码,需要修改的只是UploadAction.java、upload.jsp这两个文件。

3、 修改后的UploadAction.java、upload.jsp这两个文件如下: 

UploadAction.java

package com.upload.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

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

public class UploadAction extends ActionSupport{

	private List<File> upload;              //上传文件
	private List<String> uploadFileName;    //上传的文件名

	public List<File> getUpload() {
		return upload;
	}

	public void setUpload(List<File> upload) {
		this.upload = upload;
	}

	public List<String> getUploadFileName() {
		return uploadFileName;
	}

	public void setUploadFileName(List<String> uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public String upload() throws Exception{

		//如果选择了上传功能,则执行上传操作;否则,不作任何操作
		if(getUpload() != null){	

			//遍历,对每个文件进行读/写操作
			for(int i = 0; i < upload.size(); i++){
				//根据上传的文件得到输入流
				InputStream is = new FileInputStream(getUpload().get(i));
				//指定输出流地址,此处是输出到服务器项目的根目录下的images/userPhoto下
				OutputStream os = new FileOutputStream(getWebRootPath() + "images\\userPhoto\\" + getUploadFileName().get(i));

				byte buffer[] = new byte[1024];
				int count = 0;
				//把文件写到指定位置的文件中
				while((count = is.read(buffer)) > 0){
					os.write(buffer, 0, count);
				}
				//关闭输出流对象
				os.close();
				//关闭输入流对象
				is.close();
				//返回
			}
			return SUCCESS;
		}
		else {
			return ERROR;
		}
	}

	/**
	 * 获得web项目根目录
	 */
	public String getWebRootPath() throws Exception {
		ActionContext actionContext = ActionContext.getContext();
		ServletContext servletContext = (ServletContext)actionContext.get(ServletActionContext.SERVLET_CONTEXT);
		String rootPath = servletContext.getRealPath("/");
		return rootPath;
	}
}

upload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

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

  <body>
      <s:form action="upload.action" method="post" enctype="multipart/form-data">
        <div>
          <label for="photoPath1">上传文件一:</label>
          <input type="text" id="photoPath1" disabled="disabled"/>
          <input type="button" onclick="myfile1.click();" value="选择文件" id="select1"/><br />
          <input type="file" id="myfile1" name="upload"  onchange="photoPath1.value=this.value" style="display:none" />
        </div>
        <div>
          <label for="photoPath2">上传文件二:</label>
          <input type="text" id="photoPath2" disabled="disabled"/>
          <input type="button" onclick="myfile2.click();" value="选择文件" id="select2"/><br />
          <input type="file" id="myfile2" name="upload"  onchange="photoPath2.value=this.value" style="display:none" />
        </div>
        <div>
          <label for="photoPath3">上传文件三:</label>
          <input type="text" id="photoPath3" disabled="disabled"/>
          <input type="button" onclick="myfile3.click();" value="选择文件" id="select"/><br />
          <input type="file" id="myfile3" name="upload"  onchange="photoPath3.value=this.value" style="display:none" />
        </div>
          <input type="submit" value="上传" />
      </s:form>
  </body>
</html>

修改代码后,通过浏览器访问该项目的upload.jsp即可看到看到上传页面。

时间: 2024-12-11 08:35:07

Struts2中实现多文件上传功能的相关文章

struts2中简单的文件上传

2016-08-31 一.       文件上传 利用commons-fileupload-1.2.1.jar实现简单的上传文件,首先在页面上填写表单,记得加上enctype="multipart/form-data",主要是确保上传文件的正确编码,设置表单的MIME编码,让form中的input值以2进制传过去,这样就能用于上传文件了. 2. 配置struts.xml,完成fileUpload与action实例映射, 这里以上传一个图片文件为例 <action name=&qu

【SSH网上商城项目实战13】Struts2实现文件上传功能

上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说.为此,这篇文章详细介绍一下Struts2实现文件上传的功能. 1. 封装文件信息 我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件.文件类型和文件名.针对我们要传的图片,我们新建一个Model如下: public class FileImage { private File file; private String contentType; private String fi

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

MVC中使用Ajax和HTML5实现文件上传功能

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法——File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的“读

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

nodejs 实现简单的文件上传功能

首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传功能,优点:浏览器兼容好. 3.通过xhr level2的异步请求,可以百度formData对象. 这里使用2做个练习. node插件请看下package.json文件 { "name": "upload", "version": "0.1

配置php.ini实现PHP文件上传功能

本文介绍了如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项,这些选项是文件上传成败的关键.我们以php.5.3.5的Windows版本为例说明. php.ini中文件上传功能配置选项说明 用文本工具(推荐EditPlus)打开php.ini 配置文件,查找 File Uploads ,在这个区域有以下3个选项: file_uploads = On 是否允许HTT

Spring MVC使用commons fileupload实现文件上传功能

通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties> <spring.version>3.0.7.RELEASE </spring.version> <junit.version>3.8.1</junit.version> <fileupload.version>1.2.2</fileupl

Android 实现文件上传功能(upload)

文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程序上传文件的例子.这里只写出了Android部分的代码,服务器的代码没有贴出来,有需要完整上传功能代码的朋友可以跟我联系哟- 首先新建一个Android工程,新建主启动Activity: MainActivity.java: package com.xzq.upload; import java.io.DataOutputStream; import