Struts2的文件上传

以前感觉文件上传不怎么会,都是从网上粘贴的代码就行了,这两天学习了下Struts2的文件上传,感觉很好用啊!记录以便己用。

在JavaEE中的文件上传需要注意一点的是就是:表单的enctype属性了。

enctype主要有三种属性:

1、application/x-www-form-urlencoded:这个是默认的编码方式,它只处理表单域中的value值,采用这种方式会把表单域中的值处理成URL的形式。

2、multipart/form-data:这种方式会以二进制的方式来处理表单中的数据,它也会把文件域指定的文件封装到请求参数中去。

3、text/plain:当表单action属性为mailto:URL的形式的时候使用它比较方便,它主要是用于直接通过表单发送邮件的情况。

使用Struts2上传文件主要依赖的组件是common-fileupload.jar和common-io-*.jar,而且在JSP中的文件类型的Input中,在Struts2中相对应着三个属性值分别为:文件类型:***,String类型:***FileName,String类型:***ContentType

JSP中表单如下:

	<s:form action="addPic" method="post" enctype="multipart/form-data">
		<s:textfield name="picName" label="图片名" />
		<s:file name="pic" label="请选择文件" />
		<s:submit value="提交" />
	</s:form>

提交给Struts2的Action

public class AddPicAction extends ActionSupport {

	private String picName;
	//每个上传的文件域需要封装三个字段域
	private File pic;				//对应上传文件本身
	private String picFileName;		//对应上传文件的原始名字
	private String picContentType;	//对应上传文件的类型

	@Override
	public String execute() throws Exception{
		//这里主要是通过IO流实现文件的读写
		String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
		String newFileName = UUID.randomUUID().toString()+
				picFileName.substring(picFileName.lastIndexOf("."));
		//打印一下文件保存的路径
		System.out.println(uploadPath+"/"+newFileName);
		//IO输入流通过FileInputStream将文件从盘中读进来
		FileInputStream is = new FileInputStream(pic);
                //通过FileOutputStream将文件写到我们要保存的路径下
                FileOutputStream os = new FileOutputStream(uploadPath +"/"+newFileName);

		byte[] buff = new byte[1024];
		int len = 0;
		while((len = is.read(buff))>0){
			os.write(buff, 0, len);
		}
		is.close();
		os.close();

		return SUCCESS;
	}
        //这里字段的setter和getter方法就省略啦!
 }

之后通过struts2的配置文件跳转到相应的页面就行了,然后还需要对上传文件进行过滤,肯定不能让什么文件都能上传,那样相当不安全吧!

Struts2给我们提供了一个fileUpload拦截器,使用相当方便,我只需要在Strtus2的配置文件中引入相应的拦截器就行了:如下:

<action name="addPic" class="struts2.AddPicAction">
       		<interceptor-ref name="fileUpload">
       			<!-- 设置允许上传的文件类型 -->
       			<param name="allowedTypes">image/jpeg,image/png,
       				image/gif,image/pjpeg</param>
       			<!-- 设置允许上传文件的大小为:20K -->
       			<param name="maximumSize">20000</param>
       		</interceptor-ref>
       		<!-- 还需要系统默认的拦截器 -->
       		<interceptor-ref name="defaultStack" />
       		<result name="input">upload.jsp</result>
       		<result>success.jsp</result>
       </action>

这个地方注意的一点是引入了fileUpload拦截器之后,系统默认的拦截器就不起作用了,这时还需要我们手动的把defaultStack引入进去。

如果上传文件不符合我们要求的就会报错,系统会默认提示错误,但是那都是英文的,对于我们使用汉语的来说不是一件好事啊!所以我们需要把英文转换成汉语,我需要建一个国际化文件比如:message_zh_CN.properties我们可以把报错的信息写进去:

struts.messages.error.content.type.not.allowed是提示文件不是允许的类型

struts.messages.error.file.too.large是提示文件太大

struts.messages.error.uploading是提示未知错误

这样拦截器就完成了!

时间: 2024-09-30 02:41:09

Struts2的文件上传的相关文章

【SSH网上商城项目实战13】Struts2实现文件上传功能

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51366384 目录(?)[+]         上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说.为此,这篇文章详细介绍一下Struts2实现文件上传的功能. 1. 封装文件信息         我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件.文件类型和文件名.针对我们要传的图片,我们

struts2的文件上传和文件下载

实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致  <input type="file" name="file1"/>        private File file1;   (2)限制上传文件大小和类型的格式是定死的,最好记住,记不住知道去哪里查:虽然不做要求,完全懂框架内部的机制,但是找一些东西还是需要能找到的,这样你可以很好的实现一些功能,因为这些关键字都是框架底层定义好的,图一是找到配

struts2.0-高手来解答下关于struts2里文件上传问题

问题描述 高手来解答下关于struts2里文件上传问题 解决方案 这是显示上传页面 解决方案二: 这个就是路径的原因,自己看看图片的路径

struts2中文件上传拦截器 是不是不能在多个action中引用???

问题描述 <global-results> <result name="input">/message.jsp</result></global-results><!--定义全局的返回视图--><action name="updateHead" class="updateHead"> <interceptor-ref name="fileUpload"

JavaWeb中struts2实现文件上传下载功能实例解析_java

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

java中struts2实现文件上传下载功能_java

先谈一谈struts2实现文件的上传和下载实例实现的原理: Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中.从而我们就能够以本地文件方式的操作浏览器上传的文件. 具体实现: 一.创建index.jsp页面 <body> <s:form action="upload" method="p

JavaEE中struts2实现文件上传下载功能实例解析_java

本文实例为大家分享了struts2实现文件上传下载的具体实现代码,供大家参考,具体内容如下 一.文件上传 struts提交的文件组件上传, 前台: 1).提交方式POST 2).表单类型 multipart/form-data 3).input type=file 后台: Apache提供的FileUpload组件 核心类: FileItemFactory FileItem的工厂 ServletFileUpload servlet 中的文件上传的核心类 FileItem 封装了上传的表单文件项的

java中struts2实现文件上传下载功能实例解析_java

本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签   复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

struts2 多文件上传的疑问

问题描述 struts2 多文件上传网络上找了一下都是设置为相同的name然后服务器端通过list来获取,有没有其他的方式呢?因为我这次需要上传的文件是2种,每种可以有N个文件,能用2个list来获取?或者什么方式?谁能教一下,谢谢 解决方案 应该可以用两个file数组,你把name改成两个就可以了,比如文本list为filetxts图片list为filepics,在action中设置两个File[]就可以了其实一般用一个File[]就了现实你说的功能,只要在action中在获取原文件名就可以了