struts 的文件上传
2015-10-13 16:23
357 查看
文件上传
传统的文件上传
(1)需要将form的enctype设置multipart/form-data
此时会将整个表单以二进制的方式进行提交。
接下来就无法通过request.getParameter来获取请求参数。
(2)需要启用一个文件上传的组件(SmartUpload、Common-FileUpload)
(3)Servlet通过文件上传组件来获取请求参数,获取上传的文件。
得到上传的文件之后,以IO流的方式把文件写入磁盘即可。
Servlet 3.0以后。
只要增加一个@MultipartConfig修饰Servlet。
接下来不可用request.getParameter()获取普通请求参数。
request.getPart()获取上传的文件。
得到上传的文件之后,以IO流的方式把文件写入磁盘即可。
Struts 2的更简单:
每个文件上传域,需要在Action中提供3个Field进行封装。
(1)1.与文件上传域的name同名的,类型为File的Filed.
//获得原始文件名用于,用于获取文件的类型
2.名为文件上传域的name + FileName,类型为String的Field.
3.名为文件上传域的name + ContentType,类型为String的Field
(2)接下来在返回结果的方法中,用File类型的文件进行,IO操作就行了,将文件写入
服务器的物理磁盘即可。
还有就是要记录我们的系统中有多少个文件,还有一个文件的上传时候的描述名picName,
我们可以把这个上传的文件封装成一个文件对象,里面有一系列的属性,并且这里有一
个属性保存文件上传路径。
这里需注意,需要设置一个常量的值来,设置上传文件的路径。
<constant name="struts.multipart.saveDir" value="/upload"></constant>
这里还有用一个java.util.UUID类来给上传的文件另启名字。
1.上传文件的Action类
2.封装picture对象,对图片进行管理。
文件过滤的方式有两种:
A.在Action通过代码进行控制。
File类型的Field可以获取上传文件的大小。
B.使用fileUpload拦截器进行过滤。
只要进行简单的配置即可。
allowedTypes:该参数指定允许上传的文件大小,单位是字节。
maximumSize:该参数指定允许上传的文件大小,单位是字节。
<struts>
<!-- 更改文件上传错误提示 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.devMode" value="true"/>
<constant name="struts.multipart.saveDir" value="/upload"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="FileUploadAction" class="pers.zkr.action.FileUploadAction">
<!--用拦截器控制文件上传的类型和大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedType">image/png,image/pjpeg,image/jpg</param>
<param name="maximumSize">20000</param>
</interceptor-ref>
<!--用了其它的拦截器,需要配置默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<result type="chain">listPictures</result>
<!-- 指定文件上传失败跳转到的页面 -->
<result name="input">/WEB-INF/content/uploadForm.jsp</result>
</action>
<action name="listPictures" class="pers.zkr.action.listPicturesAction">
<result>/WEB-INF/content/listpictures.jsp</result>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
更改错误提示:
要通过如下两个国际化消息的key:
struts.messages.error.file.too.large=您要上传的文件太大,请重新选择!
struts.messages.error.content.type.not.allowed=您上传的文件类型只能是图片
文件!请重新选择!
传统的文件上传
(1)需要将form的enctype设置multipart/form-data
此时会将整个表单以二进制的方式进行提交。
接下来就无法通过request.getParameter来获取请求参数。
(2)需要启用一个文件上传的组件(SmartUpload、Common-FileUpload)
(3)Servlet通过文件上传组件来获取请求参数,获取上传的文件。
得到上传的文件之后,以IO流的方式把文件写入磁盘即可。
Servlet 3.0以后。
只要增加一个@MultipartConfig修饰Servlet。
接下来不可用request.getParameter()获取普通请求参数。
request.getPart()获取上传的文件。
得到上传的文件之后,以IO流的方式把文件写入磁盘即可。
Struts 2的更简单:
每个文件上传域,需要在Action中提供3个Field进行封装。
(1)1.与文件上传域的name同名的,类型为File的Filed.
//获得原始文件名用于,用于获取文件的类型
2.名为文件上传域的name + FileName,类型为String的Field.
3.名为文件上传域的name + ContentType,类型为String的Field
(2)接下来在返回结果的方法中,用File类型的文件进行,IO操作就行了,将文件写入
服务器的物理磁盘即可。
还有就是要记录我们的系统中有多少个文件,还有一个文件的上传时候的描述名picName,
我们可以把这个上传的文件封装成一个文件对象,里面有一系列的属性,并且这里有一
个属性保存文件上传路径。
这里需注意,需要设置一个常量的值来,设置上传文件的路径。
<constant name="struts.multipart.saveDir" value="/upload"></constant>
这里还有用一个java.util.UUID类来给上传的文件另启名字。
1.上传文件的Action类
<span style="white-space:pre"> </span>private String picName; //上传文件的名,用户输入的内容 private File pic; // 上传文件的文件本身,也就是文件的上传的本地路径 private String picFileName; //封装上传文件的真实文件名 private String picContentType; //封装上传文件的文件类型 public String execute() throws Exception { //由于此处pic就代表了我们的文件,因此此处只要IO流将文件写入磁盘即可。 String uploadPath=ServletActionContext.getServletContext().getRealPath("/upload"); String newFileName=UUID.randomUUID().toString()+ picFileName.substring(picFileName.lastIndexOf(".")); FileInputStream is=new FileInputStream(pic); FileOutputStream os=new FileOutputStream(uploadPath+ File.separator+newFileName); System.out.println(uploadPath+ File.separator+newFileName); byte[] buff=new byte[1024]; int hasRead=0; while((hasRead=is.read(buff))>0){ os.write(buff,0,hasRead); } is.close(); os.close(); PicService ps=new PicService(); //调用业务逻辑组件的方法来管理系统中所有的图片 ps.addPic(picName,newFileName); System.out.println(picName); System.out.println(newFileName); System.out.println(picName); return SUCCESS; }
2.封装picture对象,对图片进行管理。
public class Picture { private Integer id; private String picName; private String fileName; public Picture(){} public Picture(Integer id, String picName, String fileName) { super(); this.id = id; this.picName = picName; this.fileName = fileName; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getPicName() { return picName; } public void setPicName(String picName) { this.picName = picName; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }
文件过滤的方式有两种:
A.在Action通过代码进行控制。
File类型的Field可以获取上传文件的大小。
B.使用fileUpload拦截器进行过滤。
只要进行简单的配置即可。
allowedTypes:该参数指定允许上传的文件大小,单位是字节。
maximumSize:该参数指定允许上传的文件大小,单位是字节。
<struts>
<!-- 更改文件上传错误提示 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.devMode" value="true"/>
<constant name="struts.multipart.saveDir" value="/upload"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="FileUploadAction" class="pers.zkr.action.FileUploadAction">
<!--用拦截器控制文件上传的类型和大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedType">image/png,image/pjpeg,image/jpg</param>
<param name="maximumSize">20000</param>
</interceptor-ref>
<!--用了其它的拦截器,需要配置默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<result type="chain">listPictures</result>
<!-- 指定文件上传失败跳转到的页面 -->
<result name="input">/WEB-INF/content/uploadForm.jsp</result>
</action>
<action name="listPictures" class="pers.zkr.action.listPicturesAction">
<result>/WEB-INF/content/listpictures.jsp</result>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
更改错误提示:
要通过如下两个国际化消息的key:
struts.messages.error.file.too.large=您要上传的文件太大,请重新选择!
struts.messages.error.content.type.not.allowed=您上传的文件类型只能是图片
文件!请重新选择!
相关文章推荐
- highcharts 从后台动态改变数据
- adapter模式 ——java设计模式
- oozie JAVA Client 编程提交作业
- java 验证
- spring的事务详解1
- Java基本基础
- 学习RxJava(资料汇总)
- spring系列之2--对接数据库
- Spring学习笔记(一) 通过Spring控制反转(IOC:Inversion of Control)为对象设置属性
- 老李分享:loadrunner的java user脚本开发
- 老李分享:Eclipse中开发性能测试loadrunner脚本
- 老李分享:loadrunner用javavuser进行接口测试
- java之JUC系列-外部Tools-Executors|Semaphor|Exchanger|CyclicBarrier|CountDownLatch
- eclipse默认目录
- java中的TreeSet的介绍以及使用
- Struts2多文件上传错误解决
- spring4 之 helloworld
- cucumber java从入门到精通(1)初体验
- java中正则表达式的应用
- Struts2 自定义拦截器实例—登陆权限验证