保存文件数据可以执行一个命令,在项目下面生成一个命令,执行 npm run gc 名字是 create-file ,放在 file/modules/create/commands 目录的下面。
回到项目,打开 CreateFileCommand 这个命令,设置一下命令参数,需要一个 userId 用户的 id,类型是 number,还需要一个 postId,所属内容的 id,类型是 number,再添加一个 metadata ,类型是 ExifParserResult 。再添加一个 file ,类型是 Express.Multer.File 。
打开这个命令的处理器,在命令处理器的构造方法里面注入一个 Repository ,实体类型是 FileEntity ,名字叫 fileRepository ,再导入需要的这些东西。
然后在 execute 方法里面,先解构一下命令参数,需要的是 userId,postId,file ,还有 metadata。这里我们可以继续再解构这个 file,需要的是 originalname 文件的原名,mimetype 文件的类型,filename 文件名,还有 size 文件的大小。
下面用 let 声明一个 fileData ,用一下 this.fileRepository.create ,一个对象参数,里面添加一个 userId,postId,originalname,mimetype,filename 还有 size 。
然后可以再判断一下 metadata,如果它有值,再解构一下这个 metadata,需要的是 imageSize 还有它里面的 tags,这个 tags 里面包含的东西就是照片的拍摄设备,拍摄参数这些东西。继续再解构一下这个 imageSize,需要的是 width 宽度,还有 height ,图像的高度。
下面设置一下 fileData,等于一个对象,先把 fileData 原有的东西放进来,再添加一个 width,然后是 height,还有 metadata,对应的值就是 tags 。
准备好要保存的文件数据以后,声明一个 file ,等于 await 用一下 this.fileRepository.save 把准备好的 fileData 交给这个方法。
最后让命令处理器返回一个对象,里面有个 insertId,对应的值就是新创建的文件数据里的 id 这个属性的值。