首先为演示方便,我这里已本地虚拟机代替服务器
上才艺, 首先是静态资源映射
(其实只需要实现WebMvcConfigurer就行,之所以选择继承WebMvcConfigurationSupport是为了后续方便接入swagger-ui)
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 静态资源映射
registry.addResourceHandler("/img/**") // 映射路径, 其中的img可以随便改
.addResourceLocations("file:/root/opt/img/secKill/"); // 服务器中存放图片的路径
}
}
若是本地路径,例如将图片放在D盘下,只需要修改为:
"file:D:/root/opt/img/secKill/"
然后就是接口了(Controller层),其中JsonResult是工具类,若不需要换成String即可
@PostMapping(value = "/userHead")
@ApiOperation(value = "用户头像上传")
// id需要是唯一的,否则会重名覆盖
public JsonResult userHead(@RequestPart("file") MultipartFile file, Long id){
// 获取上传的文件名
String fileName = file.getOriginalFilename();
// 获得文件后缀名例如.png
String lastName = fileName.substring(fileName.lastIndexOf("."));
// 生成新的文件名
String newFileName = Id + lastName;
// 将文件路径与新的文件名拼接起来, 这是在静态资源中配置的路径
File newPath = new File("/root/opt/img/secKill/",newFileName);
// 判断文件夹是否存在若不存在则逐级创建
if (!newPath.exists()) {
newPath.mkdirs();
}
try {
// 上传文件
file.transferTo(newPath);
// 将服务器
// ip地址 http://192.168.73.140
// 端口号 :8787
// 静态资源的映射路径 /img/
// 文件名 newFileName
// 进行拼接,并保存至数据库中
if (userUpdateSelfInfoService.updateUserHeadByUserId("http://192.168.73.140:8787/img/" + newFileName ,userId)==1){
return new JsonResult<>("图片已保存");
}
return new JsonResult<>("保存失败","410","预期外的错误");
} catch (IOException e) {
e.printStackTrace();
return new JsonResult<>("保存失败","410","预期外的错误");
}
}
其实看到这里,你就应该明白怎么做了,但是做戏做全套
JsonResult工具类
package com.SecKill.utils;
/**
* @Description: 返回值封装工具类
* @Author: 新写的旧代码
* @CreateTime: 2022/4/11
*/
public class JsonResult{
private T data;
private String code;
private String msg;
private String status;
public JsonResult(T data) {
this.data = data;
this.code = "200";
this.status = "success";
this.msg = "success";
}
public JsonResult(T data, String code, String msg) {
this.data = data;
this.code = code;
this.status = "fail";
this.msg = msg;
}
public JsonResult(T data, String code, String msg, String status) {
this.data = data;
this.code = code;
this.status = status;
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getStatus(){
return status;
}
public void setStatus(String status){
this.status = status;
}
}
Service层
public interface UserUpdateSelfInfoService {
int updateUserHeadByUserId(String userHead, Long userId);
}
ServiceImpl
package com.SecKill.service.impl;
import com.SecKill.mapper.UserUpdateSelfInfoMapper;
import com.SecKill.pojo.UserTable;
import com.SecKill.service.UserUpdateSelfInfoService;
import com.SecKill.vo.UpdatePassWordVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Objects;
/**
* @Author: 新写的旧代码
* @Description: 针对表【user_table】的数据库操作Service实现
* @CreateTime: 2022/4/14
*/
@Service
public class UserUpdateSelfInfoServiceImpl implements UserUpdateSelfInfoService {
@Autowired
private UserUpdateSelfInfoMapper userUpdateSelfInfoMapper;
@Override
public int updateUserHeadByUserId(String userHead, Long userId) {
return userUpdateSelfInfoMapper.updateUserHeadByUserId(userHead, userId);
}
}
Mapper层,我这里使用的是mybatis
package com.SecKill.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.SecKill.pojo.UserTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @Author: 新写的旧代码
* @Description: 针对表【user_table】的数据库操作Mapper
* @CreateTime: 2022/4/14
*/
@Mapper
@Repository
public interface UserUpdateSelfInfoMapper extends BaseMapper {
int updateUserHeadByUserId(@Param("userHead") String userHead, @Param("userId") Long userId);
}
sql语句
update user_table
set user_head = #{userHead,jdbcType=VARCHAR}
where user_id = #{userId,jdbcType=NUMERIC}
核心配置文件中关于文件上传的配置, 此配置的上一级是 --> spring:
servlet:
multipart:
# 设置单次请求的文件的总大小
max-request-size: 100MB
# 设置单个文件的大小,
max-file-size: 10MB
图片获取:
图片保存至数据库后,直接使用即可
例:
此时图片以链接形式存放于数据库中
复制链接到浏览器中查看