一.struts1中的FormFile对于文件上传已经比较简单了,但struts2比它还简单。
二.要上传文件的注意事项:
a.表单的method一定要是post
b.enctype="multipart/form-data"
c.文件域
三.表单中默认的enctype="application/x-www-form-urlencoded":
说明表单中的信息会作为一个字符串来提交。
四.文件的上传本身就是一个io的操作。
五.
在struts.xml中配置:这个表示是上传文件时使用的临时文件。
<constant name="struts.multipart.saveDir" value="c:\"></constant>
六.
action中对应文件上传域的属性设置(表单中文件上传域的name="file")
File file:
String fileFileName:对应表单域中文件上传域的name+FileName(固定的,有点像spring中的IOC)
String fileContentType:同上原则。
七.获取路径:
ServletActionContext().getRequest().getRealPath("/upload");
example1------>上传单个文件
upload.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2处理文件上传</title>
</head>
<body>
<form action="uploadAction" method="post"
enctype="multipart/form-data">
<table align="center" border="1">
<tr>
<td>
UserName:
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
File:
</td>
<td>
<input type="file" name="file">
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="提交">
</td>
<td align="center">
<input type="button" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
UploadAction
//struts2处理单文件上传。
public class UploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String username;
private File file;
// 应表单域中文件上传域的name+FileName(固定的,有点像spring中的IOC)
private String fileFileName;
// 同上
private String fileContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception {
String path = ServletActionContext.getServletContext().getRealPath(
"/upload");
InputStream is = new FileInputStream(file);
File file = new File(path, this.getFileFileName());
OutputStream os = new FileOutputStream(file);
byte[] b = new byte[1024];
int bs = 0;
while ((bs = is.read(b)) > 0) {
os.write(b, 0, bs);
}
is.close();
os.close();
return SUCCESS;
}
}
example2------》上传多个文件
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2处理文件上传</title>
<script type="text/javascript">
function addMore(){
//获取指定位置
var td=document.getElementById("more");
//创建要增加的标记
var br=document.createElement("<br>");
var input=document.createElement("<input>");
var button=document.createElement("<input>");
//设置标记的属性
input.type="file";
input.name="file";
button.type="button";
button.value="删 除";
//设置按钮的单击事件
button.onclick=function(){
//移出指定父标记的指定子标记
td.removeChild(br);
td.removeChild(input);
td.removeChild(button);
}
//增加指定父标记的指定子标记
td.appendChild(br);
td.appendChild(input);
td.appendChild(button);
}
</script>
</head>
<body>
<s:actionerror cssStyle="color:red;text-align:center" />
<form action="uploadAction2_1" method="post"
enctype="multipart/form-data">
<table align="center" border="1" width="60%">
<tr>
<td>
UserName:
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
File:
</td>
<td id="more">
<input type="file" name="file">
<input type="button" value="上传更多..." onclick="addMore()">
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="提交">
</td>
<td align="center">
<input type="button" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
//struts2处理单文件上传。(集合和数组都可以实现多文件上传)
public class UploadAction2 extends ActionSupport {
private static final long serialVersionUID = 1L;
private String username;
// 1-n文件的集合
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<File> getFile() {
return file;
}
public void setFile(List<File> file) {
this.file = file;
}
public List<String> getFileFileName() {
return fileFileName;
}
public void setFileFileName(List<String> fileFileName) {
this.fileFileName = fileFileName;
}
public List<String> getFileContentType() {
return fileContentType;
}
public void setFileContentType(List<String> fileContentType) {
this.fileContentType = fileContentType;
}
//上传指定的多个文件
@Override
public String execute() throws Exception {
// 如果用户没有上传文件
if (file != null) {
String path = ServletActionContext.getServletContext().getRealPath(
"/upload");
for (int i = 0; i < file.size(); i++) {
InputStream is = new FileInputStream(file.get(i));
File file = new File(path, this.getFileFileName().get(i));
OutputStream os = new FileOutputStream(file);
byte[] b = new byte[1024];
int bs = 0;
while ((bs = is.read(b)) > 0) {
os.write(b, 0, bs);
}
is.close();
os.close();
}
return SUCCESS;
} else {
this.addActionError("请选择文件上传!");
return INPUT;
}
}
//上传任意数量的文件
public String uploadmore() throws Exception {
return this.execute();
}
}
<action name="uploadAction2"
class="com.luowei.struts2_01.action.UploadAction2">
<result name="success">/uploadresult.jsp</result>
<result name="input">/upload2.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">40960</param>
<param name="allowedExtensions">txt,ppt,doc</param>
</interceptor-ref>
<interceptor-ref name="MyInterceptorStack"></interceptor-ref>
</action>
下载
<action name="downloadAction"
class="com.luowei.struts2_01.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="contentDisposition">
filename="spring精华.txt"
</param>
<param name="inputName">downloadFile</param>
</result>
</action>
<action name="downloadAction2"
class="com.luowei.struts2_01.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="contentDisposition">
filename="演讲稿.doc"
</param>
<param name="inputName">inputStream</param>
</result>
</action>
<action name="downloadAction3"
class="com.luowei.struts2_01.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="contentDisposition">
filename="spring精华.xls"
</param>
<param name="inputName">inputStream2</param>
</result>
</action>
<action name="downloadAction4"
class="com.luowei.struts2_01.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">
application/vnd.ms-powerpoint
</param>
<param name="contentDisposition">
filename="spring精华.txt"
</param>
<param name="inputName">inputStream3</param>
</result>
</action>
//文件下载的action
public class DownloadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 这个是文件下载的核心。
public InputStream getDownloadFile() {
return ServletActionContext.getServletContext().getResourceAsStream(
"/upload/spring精华.txt");
}
// 这个是文件下载的核心。
public InputStream getInputStream() {
return ServletActionContext.getServletContext().getResourceAsStream(
"/upload/演讲稿.doc");
}
// 这个是文件下载的核心。
public InputStream getInputStream2() {
return ServletActionContext.getServletContext().getResourceAsStream(
"/upload/spring精华.xls");
}
// 这个是文件下载的核心。
public InputStream getInputStream3() {
return ServletActionContext.getServletContext().getResourceAsStream(
"/upload/spring精华.txt");
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
1.contentType:要下载文件的类型(也是去tomcat/conf/web.xml去找对应的文件类型)默认为text/plain
2.contentLength:下载文件的大小,一般不用写。
3.contentDisipostion:下载对话框中文件的名称------》filename="指定文件名"(中文会乱码...待续)
4.inputName:重要!------》对应要下载的文件的action中的获取指定文件方法名称的......通过反射的方式去寻找)
5.bufferSize:缓存的大小,一般不用写
分享到:
相关推荐
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
在本项目中,我们关注的是Struts2中的文件上传和下载功能,这些功能是Web开发中常见的需求,尤其在处理用户数据提交或提供资源下载时。下面将详细介绍这个“struts2文件上传下载(注解版)”项目的关键知识点。 1. ...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在Struts2中,文件上传和下载是常见的功能,它们允许用户从服务器上下载文件或向服务器上传文件。理解并掌握这一部分的知识对于开发交互性强的Web应用至关重要。 ### 一、文件上传 1. **使用Struts2的FileUpload...
在Struts2中,文件上传和下载是常见的功能,它们使得用户能够交互地处理文件,如上传图片、文档或者下载资源。下面我们将深入探讨如何利用Struts2实现文件上传和下载。 一、文件上传 1. 配置Struts2核心拦截器:...
第八章:struts2文件上传下载.ppt
在Struts2框架中,文件上传和下载是常见的功能需求,但处理中文文件名或内容时,可能会遇到中文乱码的问题。这个问题主要涉及到字符编码的处理,包括HTTP请求的编码、文件名的编码以及文件内容的编码。接下来,我们...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
Struts2 文件上传是Web开发中的一个重要功能,它允许用户通过网页上传文件到服务器。Struts2 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,提供了丰富的特性和强大的控制层功能,使得文件上传...