基于基础的配置在这里就不多说了。目前上传的代码附件只是为了给读者提供思路罢了,具体的还是看自己的业务逻辑进行参考。若是有好的想法和写法,可以留言共享。
controller层:
@ApiOperation(value = "上传图片接口",notes = "属于全部修改")
@PostMapping(value = "/video/add")
public Map<String,Object> add(HeadPortraitUsers headPortraitUsers, @RequestParam(value = "file", required = false)
MultipartFile file) throws IllegalStateException, IOException {
Map<String,Object> resultMap = new HashMap<>();
log.info("上传的头像名为========================:" + file);
if (file == null) {
/* headPortraitRepository.save(headPortraitUsers);*/
resultMap.put("code", "0001");
resultMap.put("message", "上传的图片不能为空");
} else {
String str="E://temp-imgs//"; //图像暂时存放的地址
String fileName = file.getOriginalFilename();//获取上传文件的名称
//重命名
/*Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );*/
/* //以下是获取当前时间并将其转化为String类型的拼接进去
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String nowTime = sdf.format(date);*/
fileName = UUID.randomUUID().toString().replace("-", "")
+ fileName.substring(fileName.lastIndexOf("."));
//若是图片想以当前日期命名,可以选择下面这种
//fileName = nowTime + fileName.substring(fileName.lastIndexOf("."));
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后缀名
log.info("图片的后缀名为===========:" + suffixName);
if(!suffixName.equals(".jpg") && !suffixName.equals(".png")){
resultMap.put("code", "999");
resultMap.put("message", "请选择以jpg或png格式的文件");
return resultMap;
}
File saveFile = new File( str + fileName); //上传后,图像的路径
log.info("图像文件上传后的路径为======:" + saveFile);
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(saveFile));
out.write(file.getBytes());
//FilterOutputStream 的 close 方法先调用其 flush 方法,然后调用其基础输出流的 close 方法。
out.flush();
out.close();
//把得到的路径名存到实体类的字段中
headPortraitUsers.setPortrait(fileName);
//直接使用jpa的方法进行添加,底层是若没有就添加,有则进行修改
headPortraitRepository.save(headPortraitUsers);
resultMap.put("code", "0000");
resultMap.put("message", "上传成功");
}
return resultMap;
}
这个只是jpa中的做法。是直接调用jpa中的固有方法进行添加的。但是这样写的时候,有个弊端:就是你传入数据的时候,只能以实体类传进去。有个缺点就是,你要是用户表里面有其他字段,也会进行修改,有点难受。我本来想的是通过id去修改图片,jpa提供的方法,有一个重要的点就是有的话就修改,没有的话就添加,这点是很不错的。 但是像我这样写的话。数据库会多一个表出来,这样也会增加数据的负担。 若是有哪位大哥有好的想法,或者能直接用id进行修改或者添加的话,也可以在下面进行留言~ 大家一起进步!
需要主要的是。这个层没有用到service层,而是直接跳到接口层。调用底层方法的。
repository层:
非常感谢您阅读我的文章,若有其他想法或者文章中有所不足的。
还望指出。非常感谢!!!