工具类,生成二级目录和随机文件名;
import java.util.UUID;
public class FileuploadUtils {
/**
* 截取真实文件名
*
* @param fileName
* @return
*/
public static String subFileName(String fileName) {
// 查找最后一个 \出现位置
int index = fileName.lastIndexOf("\\");
if (index == -1) {
return fileName;
}
return fileName.substring(index + 1);
}
// 获得随机UUID文件名
public static String generateRandonFileName(String fileName) {
// 获得扩展名
String ext = fileName.substring(fileName.lastIndexOf("."));
return UUID.randomUUID().toString() + ext;
}
// 获得hashcode生成二级目录
public static String generateRandomDir(String uuidFileName) {
int hashCode = uuidFileName.hashCode();
// 一级目录
int d1 = hashCode & 0xf;
// 二级目录
int d2 = (hashCode >> 4) & 0xf;
return "/" + d1 + "/" + d2;
}
}
//文件上传action
//三个固定的变量;必须提供setter方法;
// 上传文件变量;
private File upload;//jsp中fs标签 file标签的name;
private String uploadFileName;// 文件名:页面name属性值+FileName;
private String uploadContentType;// 文件类型;页面name属性值+ContentType;
代码;
// 处理上传的文件;
// 判断有无上传文件
if (upload != null) {
// 随机文件名;
String randomFilename = FileuploadUtils
.generateRandonFileName(uploadFileName);
// 随机目录;
String randomFileDir = FileuploadUtils
.generateRandomDir(randomFilename);
System.out.println(randomFileDir);
// 存放位置+拼接目录和文件名;
String realPath = SystemContent.BASEFILEDIR + randomFileDir + "/"
+ randomFilename;
// 将文件从临时存放位置copy到正式存放位置;
FileUtils.copyFile(upload, new File(realPath));
// 调用service;保存数据;
// 手动设置 保存的上传文件的名字和地址;
// 名字就存真实名字;
user.setFilename(uploadFileName);
// 地址,用相对路径,因为将来存放位置发生变化用对位置很麻烦;
user.setPath(randomFileDir + "/" + randomFilename);
}