Struts2上传文件(1)
使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据。但是Struts在原有的上传解析器基础上做了很多的封装,简化了文件上传。主要是在Struts核心包中的default.properties文件中的文件解析器,配置如下所示。
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakart
根据Struts框架的配置可知,在Struts中默认是使用jakart的Common-FileUpload的文件上传框架,因此要使用文件上传功能,还需要加入commons-io-*.jar 和commons-fileupload-*.jar文件到WEB-INF下的lib包中,然后Build path一下,就可以使用了。
上传文件只需要下列几部就可以成功上传文件。
1.jsp页面加入如下代码:
<body> <s:form action="test!file.action" method="POST"
enctype="multipart/form-data">
<s:file name="file" label="file"></s:file>
<s:submit value="submit" />
</s:form>
</body>
2、编写文件上传action,在action中加入如下代码判断,并生成get和set方法
private File file;//上传文件信息
private String fileContentType;//上传文件类别
private String fileFileName;//上传文件文件名
3、重命名文件名
在此处主要是使用了java中的UUID类生成字符串作为文件名,代码如下所示
String fileName = UUID.randomUUID().toString()+ fileFileName.substring(fileFileName.lastIndexOf("."),fileFileName.length());
4、获取文件上传路径
主要是使用了ServletActionContext中的方法,代码如下所示
String path = ServletActionContext.getServletContext().getRealPath("/upload/"+fileName);
5、最后一步使用java文件流将文件上传到指定的路径中,代码如下所示
FileInputStream fis;
try {
fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(path);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("error:" + e.getMessage());
}
完成上面几部之后,文件就可以成功上传到指定的文件夹中。但是,这个上传还处在许多的问题,上传文件的大小没有限制,文件的格式没有限制,这些都会带来很大的问题的,在后面的章节中将逐步的解决类似的问题。
Struts2上传文件(1)的更多相关文章
- Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法
Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...
- [JavaWeb基础] 009.Struts2 上传文件
在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...
- 利用struts2上传文件时,如果文件名中含有-符号,那么会出错
利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...
- struts2上传文件添加进度条
给文件上传添加进度条,整了两天终于成功了. 想要添加一个上传的进度条,通过分析,应该是需要不断的去访问服务器,询问上传文件的大小.通过已上传文件的大小, 和上传文件的总长度来评估上传的进度. 实现监听 ...
- 关于Struts2上传文件的最大Size的设置
今天使用Struts2的文件上传控件时,在struts.xml中,将处理上传的action中的fileUpload拦截器的maximumSize参数设置为5000000,上传了一个3M的文件后发现控制 ...
- 菜鸟学SSH(五)——Struts2上传文件
上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...
- 工作笔记4.struts2上传文件到server
本文介绍两种:上传文件到server的方式 一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中: 1.提交Form表单 为了能完毕文件上传,我们应该将这 ...
- Struts2上传文件
jsp: <form action="file_upload.action" method="post" enctype="multipart/ ...
- struts2上传文件类型列表
'.a' : 'application/octet-stream', '.ai' : 'application/postscript', '.aif' ...
随机推荐
- D3.js系列——比例尺和坐标轴
比例尺是 D3 中很重要的一个概念.绘制图形时直接用数值的大小来代表像素不是一种好方法,本章正是要解决此问题. 一.为什么需要比例尺 上一章制作了一个柱形图,当时有一个数组,绘图时,直接使用 250 ...
- hadoop2.2.0伪分布式安装
修改主机名和IP的映射关系 vi /etc/hosts 192.168.61.134 hadoop 关闭防火墙 #查看防火墙状态 service iptables status #关闭防火墙 serv ...
- 【转】线程同步------java synchronized详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- 为InfiniBand而哭泣
自古就不乏还没有開始就结束的那种精彩.我称之为殉道者.InfiniBand就是当中之中的一个.尽管它有陨落之势,我依旧要为它鼓掌. 假设说以太网旨在将主机联系在一起,那么InfiniBand的初衷就是 ...
- [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive.
1.滑动时候警告[Intervention] Unable to preventDefault inside passive event listener due to target being tr ...
- C语言中函数调用过程(如何管理栈空间)
ps:先做草稿,以后有时间再整理并贴图,:) 主要是利用栈底寄存器(ebp).栈顶寄存器(esp)跟eax寄存器(存储返回值)来实现. 假设P调用Q: P() { Q(1,2); } (跟实际情况可能 ...
- 51单片机 | 1-Wire总线及应用实例
———————————————————————————————————————————— 1-Wire总线 - - - - - - - - - - - - - - - - - - - - - - - ...
- jQuery 获取DOM节点的两种方式
jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: var dom = $(dom)[0]; 如: $("#id&qu ...
- Nginx主动连接与被动连接的差别
1.主动连接是指Nginx主动发起的同上游server的连接:被动连接是指Nginx接收到的来自client主动发起的连接; 2.主动连接用ngx_peer_connection_t结构体表示:被动连 ...
- WP8 NavigationInTransition实现页面切换效果
NavigationInTransition这个是实现页面切换效果,而且没控件来拖,要自己手动写, 将App.xaml.cs中InitializePhoneApplication()函数里的RootF ...