Struts2多文件上传原理和示例
一、创建上传文件的页面,代码如下所示
1、Struts2也可以很方便地实现多文件上传。 在输入表单域增加多个文件域:multifileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>多文件上传</title>
</head>
<body>
<font color="red"><s:fielderror/></font>
<form action="multiFileUpload.action" method="POST" enctype="multipart/form-data">
文件标题:<input type="text" name="title" size="50" value="${param.title }"/><br/>
<!-- 设置二个文件域,名字相同 -->
选择第一个文件:<input type="file" name="upload" size="50"/><br/>
选择第二个文件:<input type="file" name="upload" size="50"/><br/>
<input type="submit" value=" 上传 "/>
</form>
</body>
</html>
2、在Action类中用数组来封装该多个文件域:MultiFileUploadAction.java
package org.qiujy.web.struts2;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass MultiFileUploadAction extends ActionSupport {
privatestaticfinalintBUFFER_SIZE = 16 * 1024;
// 文件标题
private String title;
// 用File数组来封装多个上传文件域对象
private File[] upload;
// 用String数组来封装多个上传文件名
private String[] uploadFileName;
// 用String数组来封装多个上传文件类型
private String[] uploadContentType;
// 保存文件的目录路径(通过依赖注入)
private String savePath;
//以下为所有属性的getter和setter。省略。。。
// 自己封装的一个把源文件对象复制成目标文件对象
privatestaticvoid copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = newbyte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public String execute() throws Exception {
File[] srcFiles = this.getUpload();
// 处理每个要上传的文件
for (int i = 0; i < srcFiles.length; i++) {
// 根据服务器的文件保存地址和原文件名创建目录文件全路径
String dstPath = ServletActionContext.getServletContext()
.getRealPath(this.getSavePath())
+ "\" + this.getUploadFileName()[i];
File dstFile = new File(dstPath);
this.copy(srcFiles[i], dstFile);
}
returnSUCCESS;
}
}
3、在Struts.xml中配置只需要改变action的名称配置其余基本不需要改变什么
Struts2多文件上传原理和示例的更多相关文章
- Struts2单文件上传原理及示例
一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...
- struts2的文件上传
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- 补习系列(11)-springboot 文件上传原理
目录 一.文件上传原理 二.springboot 文件机制 临时文件 定制配置 三.示例代码 A. 单文件上传 B. 多文件上传 C. 文件上传异常 D. Bean 配置 四.文件下载 小结 一.文件 ...
- struts2实现文件上传和下载
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web 最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...
- Struts2笔记--文件上传
Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成.而Struts2则提供了更简单的封装. Struts2默认使用的是Ja ...
- Struts2的文件上传与下载
<一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...
- 【Struts2】文件上传与下载
一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...
- (十五)struts2的文件上传和下载
文件上传的原理 我们以前学习上传的时候知道需要将表单的enctype属性设置为multipart/form-data. 表单的enctype属性指定的是表单数据的编码方式,有三个值: -applica ...
随机推荐
- Sharepoint 2016 配置FBA(一) 创建Membership数据库
在Sharepoint 2016上配置FBA(forms based authentication)的过程和Sharepoint 2013一样. 第一步:创建Membership数据库. 为了存放所有 ...
- Some notes in Stanford CS106A(2)
1.Local variable(local) ex. int i = 0; factorial(i); the "i" outside the method factorial( ...
- Toggle Slow Animations
Toggle Slow Animations iOS Simulator has a feature that slows animations, you can toggle it either b ...
- 用http请求一直失败,用https开头就ok了
今天晚上在调试新浪的程序,发现之前一直可以用的接口,有时候就会失败, 各项参数全部仔细核对,都没有发现任何不同之处,真是奇了怪了. 后来一看,post 的部分,之前是用 http:// 开头的,但是此 ...
- ubuntu apt 安装 mpv
安装 curl -s https://non-gnu.uvt.nl/debian/uvt_key.gpg | sudo apt-key add - sudo add-apt-repository &q ...
- 自动保存python一个项目的需求文件
# 保存python3环境下安装的所有模块 $ pip3 freeze > requirements.txt # 保存当前项目中所依赖的模块 $ pipreqs ./ 依赖模块保存在:requi ...
- linux文件查找find命令
linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find [option ...
- Python 3.6print 出现 SyntaxError: invalid syntax
开始使用sublime学习python,编写代码如图 Ctrl+B运行以后,报错 SyntaxError: invalid syntax 百度查询以后,大部分的回答都是说,python在3.0以后 ...
- js date 和 math
Math 用于执行常用的数学任务 console.log(Math.E); 自然数底数2.718 console.log(Math.PI); 圆周率3.1415926 console.log(Math ...
- 2.8 break和continue
一.区别: break:终止整个循环. continue:中止一次循环,进入下一次循环. 1.1 break: public class Test14{ public static void main ...