上传文件

这么重要又难受的场景,框架肯定是已经考虑好了。话不多说,上代码:

import { rule } from '@aomex/core';
import { body } from '@aomex/web';
import { Router } from '@aomex/router';

const router = new Router();

router.post('/users', {
  mount: [
    body({
      name: rule.string(),
      avatar: rule.file(),
    }),
  ],
  action(ctx) {
    const { avatar, name } = ctx.body;
    avatar.size; // number
    avatar.filepath; // string
    avatar.newFilename; // string
    avatar.hash; // string
  },
});

通过web应用定制的rule.file()验证器,我们可以轻松愉快地获得文件句柄。后续转移目录或者上传到云存储空间,那还不是手到擒来?

当然文件验证器也允许做一些定制化的操作:

扩展说明
.maxSize(type:number|string)允许的最大体积。可以传递数字(单位byte)或者字符串。比如: 102415MB
.mimeTypes(mineOrExt:string[])允许的媒体类型。比如.html.png, image/*
.optional()允许数据是 undefined, null, ''或者不传,统一转换成undefined
.docs({ ... })扩展openapi的配置,允许多次调用,默认采用合并对象的形式收集配置。
如果需要覆盖原来的docs配置,则传递第二个参数为replace
.transform(fn)数据验证成功后触发,允许我们对数据进行最后的转换操作