现在用户上传头像以后,会发布一个 AvatarCreatedEvent 事件,在这个事件里做点准备,然后会执行一个调整图像大小的命令。
在 Http 客户端,打开上传头像这个请求,发送一下这个请求,我这里得到了一个异常响应,提示服务出了点问题。在运行项目开发服务的终端可以检查一下,这里提示 Duplicate entry,有重名的项目。
在数据库客户端,打开 avatar 表的结构再观察一下,你会发现 userId 这个 foreign_key 的 is_unique 是 TRUE,也就是这个 userId 栏目的值在这个表里应该是唯一的,这样如果同一个用户重复设置头像的时候就会出现刚才那个 Duplicate entry 错误。
解决这个问题我们可以把 is_unique 设置成 FALSE,或者也可以改一下头像实体跟用户的关系,在项目里打开 AvatarEntity,先注释掉这个 userId 还有 user 关系。
在数据库客户端再观察一下,刷新一下应用界面,userId 这个栏目现在已经被删除掉了。
回到项目,恢复一下注释,然后修改一下这个 user 关系,现在用的是 OneToOne,可以换成一个 ManyToOne,多对一的关系。把上面导入的 OneToOne 删除掉。
再回到数据库客户端,刷新一下,这回又会出现 userId 栏目,打开终端再观察一下,这里又会出现一个 foreign key constraint 错误。
在数据库客户端,选中这个 avatar ,执行一下 Truncate ,确定一下。 这样错误就不见了。
刷新一下应用界面,观察一下 userId 这个外键的 is_unique ,现在会变成 false ,这样用户就可以重复设置用户头像了。
在 Http 客户端,发送一下上传头像请求,成功以后,回到项目,观察一下 uploads/avatar ,这里现在会有一个 resized 目录,它里面的东西就是调整大小之后的用户头像。
找到项目目录,打开 uploads,avatar,resized,里面有几个文件,后缀分别是 large,medium 还有 small 。
这些就是调整大小之后生成的大号,中号,还有小号的用户头像。