保存了文件数据以后可以发布一个文件已创建的事件,在这个事件处理器里面,可以把上传的文件调整成几种不同的尺寸。在终端,生成一个事件,执行 npm run ge 名字是 file-created ,放在 file/modules/create/events 里面。
打开 FileCreatedEvent 这个事件,让这个事件参数继承一下 FileEntity ,然后额外再添加一个 filepath ,类型是 string。
打开这个事件对应的处理器,在这个类里面添加一个构造方法,注入两个依赖,需要一个 CommandBus ,还需要一个 configService 类型是 ConfigService。
在 handle 这个方法里,解构一下事件的参数,需要的是 filename,还有 filepath。
下面再准备一下调整大小以后生成的文件保存的位置,声明一个fileResizedPath ,用一下 this.configService.get 得到 upload.fileResized 这个配置的值。
然后可以执行调整图像大小的命令。新建一个 ResizeImageCommand,提供一个对象参数,里面需要一个 filename,一个 filepath ,还有 destination,对应的值是 fileResizedPath,再添加一个 sizes ,一个数组,里面添加一些要调整的尺寸, 一个对象,suffix 设置成 large,width 设置成 1280 。复制一份,再添加一个尺寸,suffix 是 medium ,width 是 640,再复制一份,suffix 是 thumbnail ,width 是 320。
打开 create-file.command.handler ,在 execute 方法这里,把 path 从 file 里解构出来,重新起个名字叫 filepath。
保存了文件数据以后,可以发布一个事件,新建一个 FileCreatedEvent,一个对象参数,提供一个 filepath ,再把 file 里的东西放进来。
测试
在 Http 客户端,打开创建文件请求,发送一下这个请求。成功以后,在项目里观察一下 uploads 目录,在这个 resized 目录里面,会有调整大小之后生成的几个文件,这些文件都有一个后缀,比如 large,medium 还有 thumbnail 。