基于Struts2上传文件实例解析
来源:互联网 发布:jquery格式化json日期 编辑:程序博客网 时间:2024/05/29 11:00
文件上传几乎成了我们每个系统的必备功能,那么struts2这个框架是如何帮助我们简单快速实现文件上传的呢?下面我将一个简单的实例来说明基于Struts2的文件上传。
Struts2文件上传原理:
首先简单说一下Struts2上传文件的原理:
1、利用FileUpload工具包,将用户上传的文件写入到临时文件中。
2、在struts-default.xml进行配置FileUploadInterceptor拦截器,在用户发送请求来的时候,拦截这个请求,读取文件,写入临时文件,并且调用目标Action的 set*(File myFile),这个myFile就是临时文件、set×FileName(String fileName)(真实的文件名)、set×ContentType(String contentType)(真实的文件后缀名)方法。
3、执行action的execute方法,完成上传。
4、FileUploadInterceptor负责删除临时文件(可能是错误的或者需要其他配置)。调用delete方法删除临时文件。
实例
下面是一个简单的小例子:
项目整体图
首先看一下项目的整体图:
JSP页面:
按照访问流程,首先是jsp页面:upload.jsp、success.jsp。
<body><form action="upload/uploadAction" method="post" enctype="multipart/form-data"><input type="file" name="upload"><input type="submit" value="登陆"></form></body>
注意:众所周知,上传要用post提交方式;enctype也要修改(见下文关于enctype的解释)。
Action
jsp页面有了,下面就是jsp页面要请求的action了。
public class UploadAction extends ActionSupport {//要上传的文件,这里是临时文件private File upload;//文件名,真实的文件名字,不是临时文件的哦。private String uploadFileName;//文件的类型,真实的。private String uploadContentType;public File getUpload() {return upload;}public void setUpload(File upload) {this.upload = upload;}public String getUploadFileName() {return uploadFileName;}public void setUploadFileName(String uploadFileName) {this.uploadFileName = uploadFileName;}public String getUploadContentType() {return uploadContentType;}public void setUploadContentType(String uploadContentType) {this.uploadContentType = uploadContentType;}@Overridepublic String execute() throws Exception {//获取文件要上传到的目录的真是路径,即upload文件夹在服务器上的真实路径。File uploadFile = new File(ServletActionContext.getServletContext().getRealPath("upload"));//定义输入输出流FileInputStream input = new FileInputStream(upload);FileOutputStream out= new FileOutputStream(uploadFile+"\\"+uploadFileName);try {//定义每次提交的量,即没1024B进行一次提交byte[] b = new byte[1024];//记录提交位置int i =0;while((i=input.read(b))>0){out.write(b, 0, i);}} catch (Exception e) {e.printStackTrace();}finally{input.close();out.close(); upload.delete();//删除临时文件}return "success";//如果成功,返回成功页面 } }
上传文件存放目录
建立一个上传文件的存放目录是必不可少的:upload文件夹(见截图)
Struts配置文件
要想请求到达这个action,还必须要在struts.xml配置文件中进行配置。
<struts> <package name="uploadManager" namespace="/upload" extends="struts-default"> <action name="uploadAction" class="com.action.UploadAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
Success.jsp和error.jsp非常简单了,这里就不给出了。
到这里,我们就实现了struts2的上传,上传的文件会存放在我们建立的upload文件夹中。
附Enctype解释
附:关于enctype的解释:
enctype属性指定的是表单数据的编码方式,该属性有3个值:
1)application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
2)multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。
3) text/plain:这种方式主要适用于直接通过表单发送邮件的方式。
通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数据以二
进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。
- 基于Struts2上传文件实例解析
- 基于Struts2文件上传
- Struts2 上传文件实例
- struts2文件上传实例
- Struts2文件上传实例
- Struts2文件上传实例
- struts2 文件上传实例
- Struts2文件上传实例
- 基于struts2的文件上传
- 基于Struts2的文件上传
- 基于Struts2的文件上传
- 基于Struts2的文件上传
- 基于struts2的文件上传
- 基于Struts2的文件上传
- 基于struts2的文件上传
- 基于Struts2的文件上传
- 基于struts2的文件上传
- 基于Struts2的文件上传
- 丢失分区数据恢复方法?
- 常见C/C++ XML解析器比较
- 并发编程之信号量Semaphore
- Ant 条件判断 if [转帖]
- 为什么不对
- 基于Struts2上传文件实例解析
- 【工具】Beyond Compare工具的文件夹比较功能
- 介绍Robotium+Orange实现androidUI自动化测试
- 关于html5 canvas画布
- 防止用户重复登录pptpd以及相关源代码
- Oracle+RAC+ASM数据库ora-00257日志归档器错误解决方法
- 走近SSH之Hibernate--Hibernate入门相关简介
- 线程练习题1
- openstack -Block Storage - Boot from volume