<!--[if !supportLists]-->1、 <!--[endif]-->填加JAR包:commons-fileupload-1.2.1.jar
、connons-io-1.3.2.jar放在WEB-INF/lib下
2、在from表单增加enctype属性<form action=”” method=”” enctype=”multipart/form-data”
3、Struts.xml配置文件中引入上传文件的配置
<include file=”cn/csdn/struts2/xml/file/struts-upload.xml”></include>
4、Struts-upload.xml配置文件中填加上传的action处理.并且初始化上传文件路径参数
<!-- 上传文件action的处理 -->
<action name="uploadfile" class="cn.csdn.action.GoodsAction2" method="uploadfile">
<!-- 初始化文件保存路径参数为/uploads -->
<param name="savePath">/uploads</param>
<result name="success">/ac.jsp</result>
</action>
以上是准备工作 ,做好之后就是上传功能的实现
第一种方法:用字节流实现
核心代码:
private String savePath;
private String title;
private File pic;// 文件名 与视图层的名称一致
private String picContentType;//文件名+ContentType
private String picFileName;//文件名+FileName
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File getPic() {
return pic;
}
public void setPic(File pic) {
this.pic = pic;
}
public String getPicContentType() {
return picContentType;
}
public void setPicContentType(String picContentType) {
this.picContentType = picContentType;
}
public String getPicFileName() {
return picFileName;
}
public void setPicFileName(String picFileName) {
this.picFileName = picFileName;
}
//文件上传功能实现:方法一:字节流
public String uploadfile(){
System.out.println("getSavePath()"+getSavePath());
System.out.println("savePath:"+savePath);
System.out.println("title:"+title);
System.out.println("pic:"+pic);
System.out.println("picContentType:"+picContentType);
System.out.println("picFileName:"+picFileName);
FileInputStream fis=null;
FileOutputStream fos=null;
//定义保存的路径
String savepath=getSavePath();
//根据路径创建文件路径对象
File file=new File(savepath);
if(!file.exists()){
file.mkdirs();
}
try {
//创建输入流
fis=new FileInputStream(pic);
//创建输出流
fos=new FileOutputStream(savepath+"//"+picFileName);
byte buf[]=new byte[1024];
int n=0;
while((n=fis.read(buf))!=-1){
fos.write(buf, 0, n);
}
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
第二种方法:用FileUtils
核心代码:
// 文件上传功能实现:方法二:FileUtils
public String uploadfile() {
// 定义保存的路径
String savepath = getSavePath();
// 根据路径创建文件路径对象
File file = new File(savepath);
if (!file.exists()) {
file.mkdirs();
}
try {
FileUtils.copyFile(pic, new File(file, getPicFileName()));
} catch (Exception ex) {
ex.printStackTrace();
}
return SUCCESS;
}
第三种方法:三层管道
核心代码:
// 文件上传功能实现:方法三:三层管道
public String uploadfile() {
BufferedReader br = null;
BufferedWriter bw = null;
// 定义保存的路径
String savepath = getSavePath();
// 根据路径创建文件路径对象
File file = new File(savepath);
if (!file.exists()) {
file.mkdirs();
}
try {
// 创建输入流
br = new BufferedReader(new InputStreamReader(new FileInputStream(
pic)));
// 创建输出流
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file + "//" + getPicFileName())));
char buf[] = new char[1024];
int n = 0;
while ((n = br.read(buf)) != -1) {
bw.write(buf, 0, n);
}
if (br != null) {
br.close();
}
if (bw != null) {
bw.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
三种比较 ,笔者认为还是第二种比较简单。
会了单文件上传,多文件上传就简单了。只需要把获得文件、文件类型、文件名称 定义声明时定义为数组的就可以了
核心代码:
private String savePath;
private String title;
private File[] pic;// 文件名 与视图层的名称一致
private String[] picContentType;// 文件名+ContentType
private String[] picFileName;// 文件名+FileName
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File[] getPic() {
return pic;
}
public void setPic(File[] pic) {
this.pic = pic;
}
public String[] getPicContentType() {
return picContentType;
}
public void setPicContentType(String[] picContentType) {
this.picContentType = picContentType;
}
public String[] getPicFileName() {
return picFileName;
}
public void setPicFileName(String[] picFileName) {
this.picFileName = picFileName;
}
// 文件上传功能实现:多文件上传
public String uploadfiles() {
// 定义保存的路径
String savepath = getSavePath();
// 根据路径创建文件路径对象
File file = new File(savepath);
if (!file.exists()) {
file.mkdirs();
}
try {
for(int i=0;i<pic.length;i++){
FileUtils.copyFile(pic[i], new File(file, getPicFileName()[i]));
}
} catch (Exception ex) {
ex.printStackTrace();
}
return SUCCESS;
}
}
有什么问题,请大家直接指出 。如果有什么建议,也欢迎大家提出。目的是大家共同学习。
分享到:
相关推荐
本项目主要展示了如何在Struts2框架下实现单个文件和多个文件的上传及下载,并且运用了多个拦截器来增强功能和安全性。 首先,让我们详细了解一下文件上传的过程。在Struts2中,文件上传主要依赖于`struts2-...
总的来说,通过Struts2提供的文件上传功能,开发者可以方便地处理用户的文件上传请求,无论是单个文件还是批量文件。这个精简源码案例旨在帮助初学者快速理解和实践这一功能,进一步提升其在Web开发中的技能。
总之,“Struts2单个文件上传”涵盖了文件上传的基本流程,包括客户端的HTML表单提交、服务端的文件接收与验证、以及异常处理。这个示例有助于理解Struts2框架如何处理文件上传,并提供了限制文件大小和类型的实践...
### Struts2实现文件上传(单个+多个文件上传) #### 一、单个文件上传 在Struts2框架中实现文件上传是一项常见的需求。本文将详细介绍如何在Struts2中实现单个文件的上传。 ##### JSP 页面设计 首先,我们需要在...
本文主要两种方式,一:通过 FileUtils.copyFile(file, savefile);方法复制;二:通过字节流方式复制 ; web.xml struts.xml, struts.properties, UploadAction.java, index.jsp. success.jsp
Struts2是一个强大的MVC框架,它提供了丰富的功能来支持文件上传操作,包括单个文件上传和批量文件上传。 在Struts2中,文件上传的核心组件是`Commons FileUpload`库,这是一个Apache提供的开源项目,专门用于处理...
以上就是使用Struts2实现单个和多个文件上传的基本流程。实际开发中,还需要考虑安全性问题,例如限制文件大小、过滤危险文件类型、防止路径遍历攻击等。同时,对于大量文件上传,可能需要考虑异步处理、分片上传等...
2. **Struts2 单个文件上传**: - **方式一**: 在这个例子中,我们创建了一个名为 `UploadAction` 的 Action 类。其中,`File` 类型的 `image` 属性用于接收上传的文件,`String` 类型的 `imageFileName` 和 `...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
通过深入理解Struts2框架的文件上传与下载机制,以及多个拦截器的配置和使用,开发者能够构建出功能完善且性能优异的Web应用。这不仅提升了应用程序的功能性,也增强了系统的可维护性和扩展性。然而,值得注意的是,...
### Struts2单个与多个文件上传知识点解析 #### 一、Struts2框架简介 Struts2是一个基于MVC模式的开源Web应用框架,它继承了Struts1的优点,并在此基础上进行了大量的改进和增强。Struts2的核心是拦截器...
继承自`org.apache.struts2.dispatcher.multipart.DefaultMultiPartRequest`或使用Struts2的`@FileUpload`注解来处理文件上传。例如: ```java public class UploadImageAction extends ActionSupport { private ...
在Struts2中实现多文件上传并显示进度是常见的需求,尤其是在处理大文件或者批量上传时,用户需要实时了解上传进度以提升用户体验。在本案例中,我们将探讨如何在不依赖任何第三方插件的情况下实现这一功能。 首先...
这个"struts2(ssh)带进度条文件上传 demo 的jar包1"可能是为了演示如何实现这一功能,但由于描述中提到权限问题,jar包被分成了三次上传,这里是第一部分。 在实现带进度条的文件上传时,通常需要以下步骤: 1. ...
总的来说,Struts2处理单个文件上传的过程涉及到前端表单设计、后端Action实现、文件上传的处理逻辑以及错误处理和结果展示。`FileAction.java`作为关键的后台代码,负责接收和处理上传的文件,确保了整个流程的正常...
在Struts2中,传统的文件上传是通过`<s:file>`标签实现的,但只支持单个文件上传。Goouploader插件则提供了更强大的多文件上传功能,并且具有进度条显示、断点续传等特性。下面将详细介绍如何使用Goouploader插件...
在文件上传方面,Struts2提供了方便的API和配置方式来处理单个或多个文件的上传。在这个主题中,我们将深入探讨Struts2如何实现单文件和多文件上传,并通过拦截器来处理可能出现的异常。 首先,我们来看单文件上传...
在Struts2中,文件上传是一个常见的功能,尤其在处理用户需要提交多个文件的场景下,例如上传图片或者文档。这个“struts2多文件上传”主题将深入讲解如何在Struts2框架下实现这一功能。 首先,我们需要了解Struts2...
Struts2文件上传是Web开发中的一个重要功能,它允许用户通过网页上传本地文件到服务器。在Struts2框架中,文件上传是通过特定的插件和配置实现的,提供了便捷的方式来处理用户提交的文件数据。以下是对Struts2文件...
总的来说,实现Struts1框架下的多文件上传涉及到前端的选择和预览,后端的接收和处理,以及第三方库的集成。虽然相比现代框架,这种方式可能显得较为繁琐,但它仍然是理解Web应用文件上传机制的一个重要案例。在实际...