上传文件配置
下面我们要实现文件上传的功能,先准备两个配置,打开项目里的 app-upload.config.ts ,在这个 upload 里面,添加一个 file,它的值是存储上传文件的位置,可以设置成 dest ,这个 dest 的值是 uploads 。下面再添加一个 fileResized,表示存储调整大小之后的图像文件的位置,值可以用一下 path.join,第一个项目是 dest,再加上一个 resized。
打开 FileCreateModule 模块,在模块的 imports 里面,导入 AppUploadModule 用一下 register,一个对象参数,把 destination 设置成 upload.file 这个配置。
文件拦截器
然后再去准备一个处理文件上传用的拦截器,在 file 这个目录的下面新建一个文件,放在 interceptors 里面,名字是 file.interceptor.ts ,文件里 export 一个 FileUploadInterceptor ,它的值可以用一下 FileInterceptor ,字段的名字设置成 file ,然后再提供一个选项参数,设置一下文件过滤器,把 fileFilter 这个选项的值设置成 imageFileFilter。这样创建的这个 FileUploadInterceptor ,只允许上传图像类型的文件,上传文件的时候,字段的名字要设置成 file。
上传文件接口
打开 FileCreateController 控制器,在这个控制器里定义一个上传文件用的接口,处理器的名字是 createFile,在它上面用 @Post 装饰一下,接口地址是 files ,再用 @UseGuards 添加一个守卫,用一下 AuthJwtGuard 这个守卫,下面再用一个拦截器,@UseInterceptors ,要使用的拦截器是 FileUploadInterceptor。
测试
在 Http 客户端,新建一个目录,名字是文件,在它下面新建一个请求,名字是创建文件,请求用的方法设置成 POST,配置一下请求地址,一个基本地址,加上 files 。
设置一下请求主体,类型是 Multipart Form,字段的名字要设置成 file,字段的值是一个 File,然后可以选择一个图像文件。
接口还需要验证用户身份,打开用户登录,复制一个用户的令牌,回到创建文件请求,配置一下身份验证,类型是 Bearer Token ,把复制的令牌粘贴到 Token 这个字段里。然后发送一下这个请求,成功以后回到项目,你会发现在 uploads 这个目录里面,会出现刚才上传的图像文件。