用户登录

服务端可以规定一下允许在客户端上传的文件类型,比如规定只能上传图像类型的文件,可以定义一个文件过滤器。之前我们在应用里实现过文件上传的功能,不过当初没有设置要过滤的文件,现在可以去做一个文件过滤器,放在文件上传功能上使用。这个文件过滤器在上传头像的功能上也会用到,所以我们可以用一个特别的方法让这个文件过滤器更灵活一些。

command + P,搜索 file.middleware ,打开这个文件,在这个文件的顶部,从 multer 里面再导入进来一个 FileFilterCallback 。

然后找个地方定义文件过滤器,export 一个 fileFilter,它是一个函数,让这个函数接收一个 fileTypes 参数,类型设置成 Array 尖括号 string,意思就是这个 fileTypes 参数的值可以是一个数组,数组里的数据项目的类型是 string。

这个 fileTypes 就是允许上传的文件的类型。比如 image/png ,image/jpg 之类的。

在函数主体里面,让这个函数 return 另外一个函数,这样执行这个函数的时候就会制造一个新的函数,这个 fileFilter 函数接收的 fileTypes 参数,就有点像是它要制造的这个函数的配置,也就是在它制造的这个函数的里面可以使用 fileTypes 这个参数。

它 return 的这个函数是 Multer 模块需要用的一个文件过滤器,这种函数需要 request 参数,类型是 Request,还需要一个 file 参数,类型是 Express.Multer.File,就是上传的文件相关的数据。另外还需要一个 callback 参数,类型设置成 FileFilterCallback,这个类型在上面我们已经把它从 multer 里面导入进来了。

在函数的主体里面,可以测试一下文件类型,声明一个 allowed ,用它表示测试的结果, 它的值用一下 fileTypes 要上的 some 这个方法。fileTypes 是一个数组,数组里面天生就有 some 这个方法,它的作用就是测试数组里面有没有符合条件的数据项目,如果有它就会返回 true,如果没有就会返回 false。

下面要做一下判断,检查一下 allowed , 如果上传的文件的类型是允许的文件类型,就允许上传,这种情况下就可以执行 callback 这个回调,它的第一个参数是错误,允许上传就表示没有错误,所以第一个参数的值可以设置成 null,表示没有错误。第二个参数表示是否允许上传文件,允许的话就设置成 true。

在用一下 else,如果不允许上传,也可以执行一下 callback 这个回调函数,可以给它提供一个错误信息,新建一个 Error,错误信息是 FILE_TYPE_NOT_ACCEPT。

下面我们再用这个函数制造一个文件过滤器,声明一个 fileUploadFilter,它的值可以执行一下 fileFilter,给它提供一个数组参数,这个数组里面的项目就是允许上传的文件类型,image/png,image/jpg,image/jpeg ,这些都是允许的文件类型。

然后配置一下这里创建的这个 Multer,在这个选项参数里添加一个 fileFilter,值设置成 fileUploadFilter。

最后到 HTTP 客户端,测试一下。 打开 上传文件 请求,选择一个文件,这次可以选择一个不是图像的文件。发送一下这个请求。

服务端响应回来的一个 服务暂时出了点问题,因为现在上传文件接口只允许上传几种图像文件,所以上传不是图像的文件的时候,就会报错。

这个错误可以再去处理一下,回到项目,打开 app/app.middleware , 在应用默认的异常处理器里面添加一种新的错误情况,错误信息是 FILE_TYPE_NOT_ACCEPT。 这种情况可以把响应的状态码设置成 400,响应的信息设置成 不能上传此类型的文件。

再回到 HTTP 客户端,发送一下这个上传文件请求,这次收到的响应的状态码会是 400,响应的信息是 不能上传此类型文件。

定义文件过滤器《 Node.js 服务端应用开发:用户头像 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点