解决方案(未完待续...)
1.购物车的解决方案
- 用户未登录
- 将购物车数据存入cookie
- 用户已登录
- 将购物车数据存入redis
注意:当用户由未登录 -> 已登录,需要将未登录状态的购物车数据同步到已登录的redis中。
2.购物车订单提交时,如何减少商品库存?
可采取乐观锁,不能采用重量级锁,因为这是一个高并发的操作。
乐观锁:在sql命令层面进行判断;只有条件满足时才执行sql命令
如:update items set stock = stock - '条件' where id = 'id' and stock >= '条件'
3.图片上传
- 取出后缀名并检验
- 重命名文件名(可设置为覆盖式与增量式 区别是同一个用户下有多少个图片)
- 增量式,需要加时间戳
- 定义保存路径时,最好将路径写在配置文件中(环境变更时修改方便),例如:file-upload-dev.properties
# file-upload-dev.properties
file.imageUserFaceLocation = \\workspaces\\images\\faces
@Data
@Component
@ConfigurationProperties(prefix = "file")
@PropertySource("classpath:file-upload-dev.properties")
public class FileUpload {
private String imageUserFaceLocation;
}
- 将图片做静态资源映射服务器:就是能以web形式访问图片
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
// web访问形式:http://ip:本项目端口/直接加图片路径不须加映射路径(如:faces/*.png)
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/")
.addResourceLocations("file:/workspaces/images/");
}
}
- 将能以web形式访问的图片路径保存到数据库
注意:由于浏览器存在缓存的情况,最好加上时间戳来保证更新后的图片可以及时刷新
浏览器检测图片名称是否发生变化,如果名称没变,则直接从缓存中读取此文件 - 限制文件上传大小
- 可采用 application.yml 中限制(spring.servlet.multipart.max-file-size)
- 注意:此时抛出异常,MaxUploadSizeExceededException,是不会做到捕获的,前端也不会提示
- 可采用 application.yml 中限制(spring.servlet.multipart.max-file-size)
// spring配置抛出的异常如何捕获呢?可以采用全局异常处理,统一捕获处理异常
@RestControllerAdvice
public class CustomExceptionHandler {
// 上传文件超过500k,捕获异常:MaxUploadSizeExceededException
@ExceptionHandler(MaxUploadSizeExceededException.class)
public JsonResult handlerMaxUploadFile(MaxUploadSizeExceededException ex) {
return JsonResult.errorMsg("文件上传大小不能超过500K!");
}
}

浙公网安备 33010602011771号