瑞吉点餐 day01 技术点一:公共字段自动填充 技术点二:图片上传下载
技术点一:公共字段自动填充
mybatisPlus 插件:@TableField注解 + MyMetaObjectHandler 配置类
在设置 创建人、修改人时需要拿到本次请求发起人的id,获取该数据有两种方法:
1.该数据储存在 session 中,可以通过 session 直接获取
@Autowired private HttpSession session;
2.基于一次请求响应 tomcat服务器指挥创建一个线程来处理
可以通过 ThreadLocal(set/get) 进行获取 ,
1.建立ThreadLocal封装工具类
/** * 基于ThreadLocal封装工具类,用户保存和获取当前登录用户id */ public class BaseContext { private static ThreadLocal<Long> threadLocal = new ThreadLocal<>(); /** * 设置值 * @param id */ public static void setCurrentId(Long id){ threadLocal.set(id); } /** * 获取值 * @return */ public static Long getCurrentId(){ return threadLocal.get(); } }
2.在过滤器中,当登录用户的 id ,往 TreadLocal 中设置 id
BaseContext.setCurrentId((Long)empSession);
3.在 MyMetaObjectHandler 获取 id 并赋值
@TableField(fill = FieldFill.xxxx) private Long createUser;
@Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "createUser", Long.class, BaseContext.getCurrentId()); this.strictInsertFill(metaObject, "updateUser", Long.class, BaseContext.getCurrentId()); } @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ...."); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updateUser", Long.class, BaseContext.getCurrentId()); } }
技术点二:图片上传下载
后台通过 MultipartFile 接受文件,通过 IO 流的操作将文件写入服务器的磁盘
1.在yml配置文件中配置磁盘路径
reggie:
filepath: E:/images
2.写入文件
@RestController @RequestMapping("/common") public class CommonController { // 拿到配置文件中的path路径 @Value("${reggie.filepath}") private String path; @PostMapping("/upload") public R<String> upload(MultipartFile file) { // 方法形参名 由前端 确定 // 拿到 原来的名字 的后缀名,结合 UUID 构成 新名字 String originalFilename = file.getOriginalFilename(); String endName = originalFilename.substring(originalFilename.lastIndexOf(".")); String s = UUID.randomUUID().toString(); String newName = s + endName; // 创建 path 文件夹 File file1 = new File(path); if (!file1.exists()) { file1.mkdirs(); } try { // 写入到目标文件 file.transferTo(new File(path, newName)); } catch (IOException e) { e.printStackTrace(); return R.error("文件上传失败" + e.getMessage()); } // 返回新文件名 return R.success(newName); } }
3.下载(回显)图片
@RestController @RequestMapping("/common") public class CommonController { // 拿到配置文件中的path路径 @Value("${reggie.filepath}") private String path; @GetMapping("/download") public void downLoad(String name, HttpServletResponse response) { // 设置返回文件格式 response.setContentType("jpg/png"); FileInputStream fileInputStream = null; try { // 创建字节输入流 读入文件 fileInputStream = new FileInputStream(new File(path, name)); // 创建字节输出流,返回文件 ServletOutputStream outputStream = response.getOutputStream(); // 复制流 IOUtils.copy(fileInputStream, outputStream); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }

浙公网安备 33010602011771号