JFinal2.0中上传文件重名策略的使用

JFinal2.0中对文件上传添加了更名策略,使得我们上传文件自定义命名更加简单方便。

首先、我们来看下配置

笔者是在JFinalConfig的子类afterJFinalStart时配置的重命名策略~

@Override
public void afterJFinalStart() {
	super.afterJFinalStart();
	//设置文件上传重命名策略
	OreillyCos.setFileRenamePolicy(new UpFileRenamePolicy());
}

然后、UpFileRenamePolicy实现于com.oreilly.servlet.multipart.FileRenamePolicy,这里也是重命名的主策略。

下面是我的代码:

/**
 * JFinal2.0文件上传重命名策略
 * 
 * @author L.cm 
 * email: 596392912@qq.com 
 * site:http://www.dreamlu.net
 * date 2015年7月10日下午11:23:25
 */
public class UpFileRenamePolicy implements FileRenamePolicy {

	@Override
	public File rename(File f) {
		// 获取webRoot目录
		String webRoot = PathKit.getWebRootPath();
		// 用户设置的默认上传目录
		String saveDir = JFinal.me().getConstants().getUploadedFileSaveDirectory();
		// 添加时间作为目录
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

		// /xxx/JFinal2.0-beetl-training/upload/20150710/1436542837568.txt
		StringBuilder newFileName = new StringBuilder(webRoot)
			.append(File.separator)
			.append(StrKit.isBlank(saveDir) ? "upload" : saveDir)
			.append(File.separator)
			.append(dateFormat.format(new Date()))
			.append(File.separator)
			.append(System.currentTimeMillis())
			.append(getFileExt(f.getName()));

		File dest = new File(newFileName.toString());
		// 创建上层目录
		File dir = dest.getParentFile();
		if (!dir.exists()) {
			dir.mkdirs();
		}
		return dest;
	}

	/**
	 * 获取文件后缀
	 * 
	 * @param @param fileName
	 * @param @return 设定文件
	 * @return String 返回类型
	 */
	public static String getFileExt(String fileName) {
		return fileName.substring(fileName.lastIndexOf('.'), fileName.length());
	}
}

代码比较简单,里面重命名添加名为"yyyyMMdd"日期目录和时间戳的文件名,当然这里你可以定制你的策略,这里仅供大家参考~

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。