Struts2文件上传功能浅析
本文将以图片上传为例,解析Struts2文件上传的主要过程
实例的功能:1、在jsp页面选择要上传的图片,
2、为待上传的图片取名,以便于查找

3、点击提交后,直接进入图片展示页面,
4、选择要展示的图片名后,图片显示

代码及主要解释:
jsp页面代码:
图片上传页面uploadForm.jsp:
<body>
<s:form action="addPicPro" enctype="multipart/form-data">
<s:textfield name="picName" label="图片名"/>
<s:file name="pic" label="选择上传图片"/>
<s:submit value="提交"/>
</s:form>
</body>
图片展示页面listPics:
<body>
<s:select
list="pics" listKey="fileName" listValue="picName" label="选择图片"
onchange="document.getElementById('show').src='upload/'+ this.value;"/><br/> <!--至少添加两副图片,才可以触发该js代码 -->
<img id="show"/>
</body>
***********************************************************************************************************
AddPicProAction:
public class AddPicProAction implements Action{
private String picName; //输入的文件名
//文件上传域需要用三个File进行封装
private File pic; //上传文件本身
private String picFileName; //上传文件的原始文件名
private String picContentType;//上传文件的文件类型
public String getPicName() {
return picName;
}
public void setPicName(String picName) {
this.picName = picName;
}
public File getPic() {
return pic;
}
public void setPic(File pic) {
this.pic = pic;
}
public String getPicFileName() {
return picFileName;
}
public void setPicFileName(String picFileName) {
this.picFileName = picFileName;
}
public String getPicContentType() {
return picContentType;
}
public void setPicContentType(String picContentType) {
this.picContentType = picContentType;
}
@Override
public String execute() throws Exception {
//获取/upload文件夹的绝对路径
String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
//文件新名字,以一个随机数区分开
String newFileName = UUID.randomUUID().toString() + picFileName.substring(picFileName.lastIndexOf("."));
//新建一个文件输入流,待上传的文件
FileInputStream fileInputStream = new FileInputStream(pic);
//新建一个文件输出流, 上传的物理目录
FileOutputStream fileOutputStream = new FileOutputStream(uploadPath+"\\"+newFileName);
byte[] buff = new byte[1024];
int hasRead = 0;
System.out.print(newFileName);
while ((hasRead = fileInputStream.read(buff)) > 0){
fileOutputStream.write(buff,0,hasRead);
}
System.out.print(newFileName);
fileInputStream.close();
fileOutputStream.close();
//=========上面文件上传已经成功============
PicService picService = new PicService();
picService.addPic(picName,newFileName);
return SUCCESS;
}
}
这里简要介绍一下介绍将upload文件夹新建在何位置:如果用的eclipse,直接新建在WebContent根目录下;而我自己用的是IntelliJ IDEA,在测试很久之后才发现要新建在out/artifacts/***_war_exploded/下,(测试方法:打印输出ServletActionContext.getServletContext().getRealPath("/upload"),可知道文件夹应新建在什么位置);
图例如下:

Struts2对于文件上传,需要在Action中提供三个File进行封装
1、与文件上传域的name相同,类型为File的File
2、取名为文件上传域的name+FileName ,类型为String的File
3、取名为文件上传域的name+ContentType,类型为String的File
ListPicsAction:
public class ListPicsAction implements Action{
private List<Pic> pics ;
public List<Pic> getPics() {
return pics;
}
public void setPics(List<Pic> pics) {
this.pics = pics;
}
@Override
public String execute() throws Exception {
PicService picService = new PicService();
setPics(picService.getAllPics());
return SUCCESS;
}
}
******************************************************
图片类Pic:
public class Pic {
private Integer id;
private String picName;
private String fileName; //磁盘保存的文件名
public Pic() {
}
public Pic(Integer id, String picName, String fileName) {
this.id = id;
this.picName = picName;
this.fileName = fileName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getPicName() {
return picName;
}
public void setPicName(String picName) {
this.picName = picName;
}
}
PicService类:
public class PicService {
static List<Pic> picDB = new ArrayList<Pic>();
public void addPic(String picName,String fileName){
picDB.add(new Pic(new Random().nextInt(9999),picName,fileName));
}
public List<Pic> getAllPics() {
return picDB;
}
}
******************************************************************************
Struts.xml的配置
<action name="addPicPro" class="action.AddPicProAction">
<result name="success" type="chain">listPics</result>
</action>
<action name="listPics" class="action.ListPicsAction">
<result>/WEB-INF/content/listPics.jsp</result>
</action>
Struts2文件上传功能浅析的更多相关文章
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- 学习Struts--Chap07:Struts2文件上传和下载
1.struts2文件上传 1.1.struts2文件上传的基本概述 在开发web应用的时候,我们一般会为用户提供文件上传的功能,比如用户上传一张图像作为头像等.为了能上传文件,我们必须将表单的met ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- Struts2文件上传下载
Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...
- Struts2文件上传和下载(原理)
转自:http://zhou568xiao.iteye.com/blog/220732 1. 文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1) ...
- iOS 的 Safari 文件上传功能详解
iOS 6 给 Safari 浏览器带来的另外一个功能是文件上传,终于 Safari 终于支持 input 输入框的文件类型了,并且还支持 HTML媒体捕获(HTML Media Capture). ...
- struts2文件上传大小限制问题小结
一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...
- Struts2 文件上传
一:表单准备 ① 要想使用HTML 表单上传一个或多个文件 –须把 HTML表单的 enctype属性设置为multipart/form-data –须把HTML 表单的method ...
随机推荐
- Spring ApplicationContextAware获取上下文
一.ApplicationContextAware 用处 Spring 提供了ApplicationContextAware类,通过它可以获取所有bean上下文. 二.怎么用? ①.定义一个工具类,去 ...
- TableControl大小变化
TableControl跟随Form大小变化: 选中TableControl,而不是TablePage,右侧Layout: 可以对其设置居上.居下等位置
- C#系列之String和StringBuilder
前言 首先和博园的各位打声招呼,小弟在博园呆了也有一年多了.平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,不知道在看我博文的大哥们有没有这个感觉. 读归 ...
- android4.4短信新概念
android4.4对短信引入了一个全新的概念:默认短信应用.即android用户可以在系统设置里面选择一个默认的短信应用,只有这个应用才能进行手机的基本短信操作.按照google自己的解释这样做的原 ...
- ios开发——笔记篇
:开关 BOOL isopen = !isopen; //View @property (nonatomic, assign) BOOL open;//模型属性 self.group.open = ! ...
- Starling性能优化技巧十五则
Starling的性能优化要点 一.尽可能减少状态变更 如您所知,Starling使用Stage3D来渲染所有的可见对象.这就意味着所有的绘制都是GPU完成的. 现在,Starling可以一个接一个的 ...
- 20 Best Drag and Drop jQuery Plugins--reference
reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...
- 手动开启tomacat服务器
四.配置Tomcat环境变量 1,新建变量名(关键,你的tomacat安装目录):CATALINA_BASE,变量值:E:\apache-tomcat-6.0.37 2,新建变量名(关键,你的toma ...
- Lucene全文检索系列(一)
1. Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.Lucene以其方便使用.快速实施以及灵活性受到广泛的关注.它可以方便地嵌入到各种应用中实现针对应用的全文 ...
- win7 X64可用的单文件IE6
由于日常调试需要用到老版本的ie,没有办法!用ietest老师感觉不好使,动不动就死了.就找到了ie的单文件版,有博主 小明爱切糕制作,IE6.7.8单文件版本 http://www.cnblogs. ...