文件上传

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;
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值