基于struts2实现文件的上传
第一步:在项目中配置struts2
Apache Struts方网站;
http://struts.apache.org/ 下载最新的包;
http://people.apache.org/builds/struts/ 下载历史版本的包
在官网下载好 struts-2.3.24-all.zip 之后;
解压这个文件,解压之后是五个压缩文件:
struts2-blank.wa;r struts-mailreader.war; struts-porlter.wa;r struts2-rest-showcase.war; struts-showcase.war。
在myeclipse中配置struts;
1.先把struts-blank 解压出来,
(1)
1.1找到里面lib文件夹下的jar,再在自己项目中创建lib文件夹,把这些jar复制进去。,在budlidpath -> add buildpath 。加载jar的操作就完成了
1.2还可以在myeclipse里创建类库;1.选择Java下的Build Path下2.选择Uer Library ,单击右边的new按钮。 3.在弹出的对话框中输入用户自定义包的名字。 4.选择建好的类库,单击右边的Add jars导入自定义的包,这里可以一次导入多个.jar文件 导入完成后。
然后再在工程里导入我们自定义的类库,步骤1.在项目右键点击properties => bulid path => add usrlibery => use libery 选中刚才创建好的类库
(2)还要把空项目下的src的struts.xml复制到,我们项目下的src目录下,把package中的内容删了,还有后面的内容也删了。
(3)还有就是web.xml文件;主要是在web.xml 加上struts2的过滤器;
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
到这里struts2的配置就完成了,很简单。
接下来讲一下后台的执行流程。
前台from表单;
<form action="" method="post"enctype="multipart/form-data">
</form>
表单在提交数据的时候以二进制流的形势向服务器提交数据;
struts2在原有的上传解析器继承上做了进一步封装,更近一步简化了文件上传;
struts2默认使用的是Jakarta和Common-FileUpload的文件上传框架。
Strut2的Action类:
(1)类型为File的xxx属性直接封装了上传文件的文件内容。import java.io.File;
(2)类型为String的XXXFileName这两个属性分别用于封装上传文件的文件名。
(3)类型为String的xxxContType属性封装了该文件对应的文件类型。
设置这三个属性。分别给set方法。这样子,就能够获取上传的文件,文件名,文件类型。
前台页面;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ page contentType="text/html;charset=utf-8" pageEncoding="UTF-8"%> <form action="dd.action" method="post"enctype="multipart/form-data"> <table id="imageupload"> <tr height="30px" > <td colspan="2"> 【上传照片】 </td> </tr> <tr> <td align="center">选择照片</td> <td><input type="file" name="upload" size="50" /></td> </tr> <tr> <td align="center">照片名</td> <td><input type="text" name="info" size="50" /></td> </tr> <tr height="30"> <td colspan="2" align="center"> <input type="submit" value="上传" class="btn_bg"/> <input type="reset" value="重置" class="btn_bg"/>${result} </td> </tr> </table> </form>
这里上传文件域的name属性,要和action的File类型的属性值相同;这样action才能获取文件内容;
后台处理的action;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.struts.action; import java.io.File; import java.util.Date; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import com.yxq.dao.ArticalDao; import com.yxq.dao.PhotoDao; import com.yxq.valuebean.Model_Artical; import com.yxq.valuebean.Model_Photo; import org.apache.commons.io.FileUtils; public class Uploadimg extends ActionSupport { private String info; private File upload; private String uploadContentType; private String uploadFileName; private String result; public String getResult() { return result; } public void setResult(String result) { this.result = result; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public String execute()throws Exception{ String path = ServletActionContext.getServletContext().getRealPath("/userfiles/images"); File file = new File(path); PhotoDao photoDao = new PhotoDao(); Model_Photo photo =new Model_Photo(); System.out.print(file.exists()); if(!file.exists()){ file.mkdir(); System.out.println("建立文件夹"); } FileUtils.copyFile(upload, new File(file,uploadFileName)); try{ photo.setPhoto_date(new Date()); photo.setPhoto_Name(info); photo.setPhoto_Url(uploadFileName); photo.setUser_Id(1); boolean d= photoDao.operationPhoto("upload", photo); System.out.print("上传承购与否"+d); }catch(Exception e){ e.printStackTrace(); System.out.println("获取表单信息出错"); } result="上传成功!"; return SUCCESS; } }
剩下最后一步了,就是配置struts,
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<action name="dd" class="com.test.action.Fileaction"> //这个class路径是action路径; <result name="success">/index.jsp</result> <result name="input">/error.jsp</result> <interceptor-ref name="fileUpload"> <!-- 配置拦截器限制上传文件类型及大小 --> <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param> <param name="maximumSize">2M</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action>