文件上传
逻辑
@Value("${sava_path}")
private String sava_path;
@Override
public String saveFile(MultipartFile multipartFile) {
//获取上传文件名
String oldName;
// 保存的文件名
String fileName = null;
//判断文件是否为空
if (!multipartFile.isEmpty()) {
oldName = multipartFile.getOriginalFilename();
fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
//创建文件对象
File file = new File(sava_path + fileName);
//判断当前文件夹目录在计算机是否存在
if (!file.getParentFile().exists()) {
//创建文件目录
file.getParentFile().mkdirs();
try {
//保存文件
multipartFile.transferTo(file);
}catch (Exception e){
e.printStackTrace();
return "文件上传失败";
}
} else {
//判断文件是否存在
if (!file.exists()) {
try {
//保存文件
multipartFile.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
}else{
//重新命名
fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
file = new File(sava_path + fileName);
try {
//保存文件
multipartFile.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else {
return "文件为空";
}
return "上传成功";
}
配置
// application.yml 格式 sava_path: D:\testFile\ //application.properties 格式 sava_path=D:\testFile\
按照自己的习惯选其中之一添加在你的配置文件 (sava_path 存放文件的目录)
生成文件名
/** * 时间戳加上传文件的后缀 * System.currentTimeMillis() 时间戳 * oldName.substring(oldName.indexOf(".")+1) 上传文件名中第一次出现.后的所有字符 +1 是为了排除. */ String fileName = System.currentTimeMillis()+"."+oldName.substring(oldName.indexOf(".")+1);
/** * 生成字母加数字的随机数 * @param length 长度 * @return */ public static String getStringRandom(int length) { String val = ""; Random random = new Random(); //参数length,表示生成几位随机数 for (int i = 0; i < length; i++) { String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; //输出字母还是数字 if ("char".equalsIgnoreCase(charOrNum)) { //输出是大写字母还是小写字母 int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; val += (char) (random.nextInt(26) + temp); } else if ("num".equalsIgnoreCase(charOrNum)) { val += String.valueOf(random.nextInt(10)); } } return val; } /** * getStringRandom(15) 调用上面的方法 给出你所需文件名的长度 * 其他的和时间戳的一致 */ fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
选择其中的一种 个人喜欢第二个