工具类:
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
public class FileUtils {
/**
* @param file 文件
* @param path 文件存放路径
* @param fileName 保存的文件名
* @return
*/
public static boolean upload(MultipartFile file, File path, String fileName) {
//确定上传的文件名
String realPath = path + "\\" + fileName;
System.out.println("上传文件:" + realPath);
File dest = new File(realPath);
//判断文件父目录是否存在
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdir();
}
try {
//保存文件
file.transferTo(dest);
return true;
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}
yml配置:
pro:
uploadPath: /RGVOM/CompanyDate/
Controller层:
@Value("${pro.uploadPath}")
private String uploadPath;
public final static String UPLOAD_PATH_PREFIX = "src/main/resources/static";
/**
* 2021-06-30
* 函数名称:AlarmLogFileUpload
* 函数功能:告警日志上传
* 函数参数:companyName :公司名称
*
* 返回值说明:
* @return map
* @throws IOException
* @author Rock(阮英华)
*
*******************************************************
* 修改记录:
* 2021年6月30日 创建
* @param
*/
@RequestMapping("/AlarmLogFileUpload")
public List AlarmLogFileUpload(@RequestParam("file") MultipartFile[] files,String companyName ){
System.out.println("上传的图片数:"+files.length);
List<Map<String,Object>> root=new ArrayList<Map<String,Object>>();
int i = 0; //图片后缀(用来区别同一时间产生的日志图片)
for (MultipartFile file : files) { //循环保存文件
if(i<10000){
i++;
}
Map<String,Object> result=new HashMap<String, Object>();//一个文件上传的结果
String result_msg="";//上传结果信息
//企业名称
String cname = companyName;
// 获取年月日的日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(new Date());
//判断上传文件格式
String fileType = file.getContentType();
if (fileType.equals("image/jpeg") || fileType.equals("image/png") || fileType.equals("image/jpeg")) {
//图片存储路径
File readPath = new File(UPLOAD_PATH_PREFIX + uploadPath +"/"+cname+"/"+ File.separator+"AlarmLog"+"/"+format+"_"+"AlarmLog" ); //没日期分类
// 要上传的目标文件存放的绝对路径
/** final String localPath="F:\\IDEAProject\\imageupload\\target\\classes\\static\\img"; **/
//上传后保存的文件名(需要防止图片重名导致的文件覆盖)
//获取文件名
String fileName = file.getOriginalFilename();
//获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//重新生成文件名
//fileName = format+"_"+i+suffixName;
//如果文件路径不存在则创建
if (!readPath.isDirectory()) {
readPath.mkdirs();
}
if (FileUtils.upload(file, readPath, fileName)) {
//文件存放的相对路径(一般存放在数据库用于img标签的src)
String relativePath="img/"+fileName;
result.put("relativePath",relativePath);//前端根据是否存在该字段来判断上传是否成功
result_msg="图片上传成功";
}
else{
result_msg="图片上传失败";
}
}
else{
result_msg="图片格式不正确";
}
result.put("result_msg",result_msg);
root.add(result);
}
String root_json= JSON.toJSONString(root);
System.out.println(root_json);
return root;
}
二、不创建工具类
@RequestMapping("/upload")
@RestController
@CrossOrigin
public class uploadController {
@Value("${pro.uploadPath}")
private String uploadPath;
public final static String UPLOAD_PATH_PREFIX = "src/main/resources/static";
/**
* 获取文件路径
* @param request 请求体
* @param fileName 文件名称
* @return 文件路径
*/
public String getUploadPath(HttpServletRequest request, String fileName) {
return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + uploadPath + "/" + fileName;
}
/** **************************资料上传*************************** **/
/**
* 2021-06-29
* 函数名称:CompanyFileUpload
* 函数功能:企业基本信息(营业执照、合同)上传
* 函数参数:equipment
*
* 返回值说明:
* @return map
* @throws IOException
* @author Rock(阮英华)
*备 注:BasicInfo 基础信息
*******************************************************
* 修改记录:
* 2021年6月29日 创建
* @param
*/
@RequestMapping(value = "/CompanyUpload",method = RequestMethod.POST)
public Object CompanyFileUpload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request,String companyName) {
Map<String, Object> map = new HashMap();
map.put("msg", "上传成功");
if (multipartFile.isEmpty()) {
map.put("msg", "空文件");
return map;
}
// 获取文件名
String fileName = multipartFile.getOriginalFilename();
if ("".equals(fileName)) {
map.put("msg", "文件名不能为空");
return map;
}
System.out.println("上传文件原始的名字: " + fileName);
// 使用uuid生成新文件名
String newFileName = fileName;
// String newFileName = fileName+fileName.substring(fileName.lastIndexOf("."), fileName.length()); //用原来的文件名
// String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + fileName.substring(fileName.lastIndexOf("."), fileName.length());
System.out.println("保存的文件的新名字: " + newFileName);
//企业名称
String cname = companyName;
// 获取年月日的日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(new Date());
// 生成以日期分割的文件路径
File readPath = new File(UPLOAD_PATH_PREFIX + uploadPath +"/"+ cname+"/"+File.separator+"BasicInfo" ); //没日期分类
// File readPath = new File(UPLOAD_PATH_PREFIX + uploadPath + File.separator + format); //有日期
System.out.println("存放的文件夹: " + readPath);
System.out.println("存放文件的绝对路径: " + readPath.getAbsolutePath());
// 判断文件夹是否存在
if (!readPath.isDirectory()) {
// 创建文件夹
readPath.mkdirs();
}
// 文件真实的保存路径
File file = new File(readPath.getAbsolutePath() + File.separator + newFileName);
try {
multipartFile.transferTo(file);
// 获取存储路径
String filePath = getUploadPath(request, format + "/" + newFileName);
map.put("path", filePath);
} catch (IOException e) {
e.printStackTrace();
map.put("msg", "上传失败");
}
return map;
}
postman测试: