给项目安装一个 Jimp 包,用它可以读取处理图像文件。设计一个处理文件的中间件,名字叫 fileProcessor,在它里面用一下 Jimp 上的 read() 方法读取上传的图像文件,提取照片文件里的信息,把它们添加到 request 的上面。这个中间件会配合 fileInterceptor 中间件一块儿用在文件上传接口上。在文件上传接口的处理器里面可以把照片文件信息存储到数据仓库里。
为了保存额外的照片信息,需要修改一下存储文件信息用的 file 数据表,在里面添加一个 width,height ,还有一个 metadata 字段,这个 metadata 让它可以存储 JSON 格式的数据。把照片的宽度存储在 width 字段里,照片的高度存储在 height 字段里,照片里的 exif 数据,也就是相机,镜头,光圈,快门这些速度,会在一个对象里,用 JSON.stringify() 处理一下这个对象,转换成 JSON 格式的数据,就可以把它存储到 metadata 字段里了。
再设计一个调取图像信息用的接口,客户端调用这个接口可以获取到文件信息,比如它的 id,尺寸,宽度 ,高度,还有 metadata 。
然后设计一个调整图像尺寸的功能,名字叫 imageResizer,使用 Jimp.read() 读取了文件之后得到的东西是个 Jimp 实例,它的上面会包含一些处理图像用的方法,比如调整大小,裁切,翻转等等。在这个 imageResizer 里面可以使用这些方法把上传的图像文件调整成几种不同的尺寸,生成的文件可以放在 uploads/resized 这个目录的下面。
最后再修改一下 文件服务 接口,让它可以根据 size 这个地址查询符的值,给客户端提供对应尺寸的图像文件。
下面可以整理一下项目,在终端,项目所在目录的下面,查看一下项目的状态,确定是在 file-process 这个分支上,当前在项目里没什么可以提供的东西。 再看一下提交历史
然后把项目当前的分支切换到 develop , 在这个分支上要做一次合并,合并的就是 file-process 这个分支。这样就会把 file-process 分支上多出来的提交合并到 develop 这个分支上。
最后可以再把 file-process 这个本地的分支推送到项目的 origin 这个远程的上面。