这篇博客来实现一个基于Struts2框架的文件上传。首先说到基于Struts2的文件上传,我的脑子里立马浮现出基于Struts2框架上传文件的一个注意事项:
(1)在UI页面的form表单中form标签的中一定要加
enctype="multipart/form-data" ;
(2)在UI页面的form表单中一个要有一个input标签,type为file,一定要注意这个name属性的值
<input type="file" name="upload">
(3)在Action中一定要声明3个属性,upload,uploadFileName,uploadContentType并实现set方法属性注入
private File upload;
private String uploadFileName;
private String uploadContentType;
//setter方法
(4)在struts.xml配置文件中可以对上传的文件做一些限制,比如上传文件的大小,上传文件的类型,上传文件的可扩展类型
(5)ContentType说明:它是一个类型设置
上面说完了注意事项,下面我来说说我的实现文件上传的一些具体做法(这是我在自己的CRM项目中摘出来的代码),文件的上传我会借助tomcat服务器,将文件放在tomcat服务器下的tomcat\apache-tomcat-7.0.53\webapps\pic目录下;将文件的路径放在mysql服务器中;文件的名字会利用uuid进行处理使其全局唯一。
(1)前台UI页面
<form id=form1 name=form1 action="${pageContext.request.contextPath}/customer_save.action"
method="post" enctype="multipart/form-data">
<tr>
<td>文件上传 :</td>
<td>
<input type="file" id=sChannel2 style="WIDTH: 180px" maxLength=50 name="upload"/>
</td>
</tr>
</form>
(2)Action代码(增删改)
/**
* 保存客户之上传附件功能
*/
private File upload;//表示要上传的文件
private String uploadFileName;//表示要上传文件的名称
private String uploadContentType;//表示上传文件的类型为MIME类型
public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
/**
* 保存客户功能
*/
public String save(){
//判断客户是否要上传文件
if(uploadFileName != null){
try {
//处理文件名,使其全局唯一
String uuidName = UploadUtils.getUUIDName(uploadFileName);
//声明保存的路径
String filePath = "D:\\program\\eclipse_kepler_project\\tomcat\\apache-tomcat-7.0.53\\webapps\\upload\\";
//创建File对象
File file = new File(filePath + uuidName);
//简单方式
FileUtils.copyFile(upload, file);
customer.setCust_file_path(filePath+uuidName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
customerService.save(customer);
return "save";
}
/**
* 编辑保存客户
* @throws IOException
*/
public String update() throws IOException{
//判断是否修改了文件,如果修改了,原来没有文件直接保存,否则删除原来文件再保存,没有修改可以直接忽略它
if(uploadFileName!=null){
//先删除旧的照片
String oldFile = customer.getCust_file_path();
if(oldFile!=null && !oldFile.trim().isEmpty()){
File file = new File(oldFile);
file.delete();
}
//上传新的图片
String uuidName = UploadUtils.getUUIDName(uploadFileName);
String filePath = "D:\\program\\eclipse_kepler_project\\tomcat\\apache-tomcat-7.0.53\\webapps\\upload\\";
File file = new File(filePath + uuidName);
FileUtils.copyFile(upload, file);
customer.setCust_file_path(filePath + uuidName);
}
customerService.update(customer);
return "update";
}
/**
* 根据id删除客户
* @return
*/
public String delete(){
Customer customer2 = customerService.findCustomerById(customer.getCust_id());
String filePath = customer2.getCust_file_path();
customerService.delete(customer2);
File file = new File(filePath);
if(file.exists()){
file.delete();
}
return "delete";
}
(3)struts.xml文件的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 全局设置文件上传总大小 struts.multipart.maxSize=2097152-->
<constant name="struts.multipart.maxSize" value="20971520"/>
<package name="crm_ssh01" extends="struts-default" namespace="/">
<!-- 客户模板,通配符的方式,action交由spring来管理 -->
<action name="customer_*" class="customerAction" method="{1}">
<result name="initAddUI">/jsp/customer/add.jsp</result>
<result name="page">/jsp/customer/list.jsp</result>
<result name="save" type="redirectAction">customer_findByPage.action</result>
<result name="initUpdate">/jsp/customer/edit.jsp</result>
<result name="update" type="redirectAction">customer_findByPage.action</result>
<result name="delete" type="redirectAction">customer_findByPage.action</result>
<!-- 允许文件上传的大小 -->
<param name="fileUpload.maximumSize">20971520</param>
<!-- 允许文件上传的类型 -->
<param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
<!-- 决定文件上传的类型 -->
<param name="fileUpload.allowedExtensions">.jpg,.txt,.png</param>
</action>
</package>
<struts>
这就是基于struts2框架的文件上传的一些代码片段功能。