struts的文件上传方法实现:
1、实体类对应属性
2、上传的实现方法:
/**
* 保存用户的信息
*/
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
public void saveUser(ElecUser elecUser) {
//1、遍历多个附件,组织附件的PO对象,完成文件上传,保存用户的附件(多条数据),建立附件表和用户表的关联关系
this.saveUserFiles(elecUser);
//2、组织PO对象,保存用户
elecUserDao.save(elecUser);
}
/**
* 遍历多个附件,组织附件的PO对象,完成文件上传,保存用户的附件(多条数据),建立附件表和用户表的关联关系
* @param elecUser
*/
private void saveUserFiles(ElecUser elecUser) {
//设置上传时间
Date progressTime = new Date();
//获取上传的文件
File[] uploads = elecUser.getUploads();
//获取上传的文件名
String[] fileNames = elecUser.getUploadsFileName();
//获取上传文件的类型
String[] contentTypes = elecUser.getUploadsContentType();
//遍历
if(uploads!=null && uploads.length>0){
for(int i=0;i<uploads.length;i++){
//组织附件PO对象
ElecUserFile elecUserFile = new ElecUserFile();
elecUserFile.setFileName(fileNames[i]);
elecUserFile.setProgressTime(progressTime);
/**将文件上传,同时返回路径path*/
String fileURL = FileUtils.fileUploadReturnPath(uploads[i],fileNames[i],"用户管理");
elecUserFile.setFileURL(fileURL);//上传路径(保存、应用与下载)
elecUserFile.setElecUser(elecUser);//重要:建立关联关系,与用户建立关系,否则外键为null
elecUserFileDao.save(elecUserFile);
}
}
}
3、对应的工具类
package cn.itcast.elec.utils;
import java.io.File;
import java.util.Date;
import java.util.UUID;
import org.apache.struts2.ServletActionContext;
public class FileUtils {
/**
* 完成文件上传,返回路径path
* @param file
* @param fileName 文件名
* @param model 模块名
* @return
* 1:完成文件上传的要求
1:将上传的文件统一放置到upload的文件夹下
2:将每天上传的文件,使用日期格式的文件夹分开,将每个业务的模块放置统一文件夹下
3:上传的文件名要指定唯一,可以使用UUID的方式,也可以使用日期作为文件名
4:封装一个文件上传的方法,该方法可以支持多文件的上传,即支持各种格式文件的上传
5:保存路径path的时候,使用相对路径进行保存,这样便于项目的可移植性
*/
public static String fileUploadReturnPath(File file, String fileName,
String model) {
//1、获取上传文件统一路径的path(upload)
String basepath = ServletActionContext.getServletContext().getRealPath("/upload");
//2、获取日期文件夹(/yyyy/MM/dd/)
String datepath = DateUtils.dateToStringByFile(new Date());
//在路径上添加模块名(upload\2014\12\01\用户管理)
String filepath = basepath + datepath + model;
//3、判断文件夹是否存在,如果不存在,创建
File dateFile = new File(filepath);
if(!dateFile.exists()){
dateFile.mkdirs();
}
//4、生成对应的文件名
//获取文件名后缀
String suffix = fileName.substring(fileName.lastIndexOf("."));
//生成uuid文件名
String uuidFileName = UUID.randomUUID().toString() + suffix;
//生成最终上传的文件名
// File destFile = new File(filepath+"/"+uuidFileName);
File destFile = new File(dateFile,uuidFileName);
//上传文件(剪切)
file.renameTo(destFile);
//复制
// org.apache.commons.io.FileUtils.copyFile(srcFile, destFile);
return "/upload"+datepath+model+"/"+uuidFileName;
}
}
package cn.itcast.elec.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
/**将日期类型转换成String类型,file的格式*/
public static String dateToStringByFile(Date date) {
String sDate = new SimpleDateFormat("/yyyy/MM/dd/").format(date);
return sDate;
}
}