文件上传的设计实现
2021-01-04 18:20:47

文件上传是大部分前后台都可能涉及到的业务,写一篇文章,规范一下自己和可能看到的公司小伙伴对于文件上传业务的实现逻辑。

这篇文章有以下几个部分:

  1. 表设计
  2. 实现逻辑

表设计

表设计受文件存储方式影响,如果系统采用分片存储的方式存储文件,可能需要更多的表。这里仅使用最简单情况,设计两张表用于上传业务。

  • 上传业务表
    • id
    • name 上传业务名称
    • max_file_size 文件大小限制
    • mime_types mime限制
    • disk 固定存储磁盘
    • path 文件存储路径固定前缀
    • created_at 添加时间
    • updated_at 更新时间
  • 文件表
    • id
    • task_id 上传业务id
    • user_id 上传用户id
    • disk 文件存储磁盘
    • path 文件存储路径
    • size 文件大小,字节数
    • ext 文件扩展名
    • mime_type 文件mime
    • original_name 原始文件名称
    • md5 文件md5值,用于检查是否可以秒传
    • used_at 使用时间,定时删除此字段为空的文件和记录
    • created_at
    • updated_at

业务逻辑

  1. 每当有新的上传业务时,根据实际情况记录上传业务表,设置上传限制用于文件上传的表单校验。
  2. disk和path字段不是固定的,只要能找到文件存储位置即可,单服务器只有一个字段也可以,多服务器或者oss也可能需要更多字段。
  3. 文件上传后记录文件表,业务表存入成功后,修改文件表的used_at字段。
  4. 设置一个定时任务,根据需要定时清理文件表used_at为空的记录。
  5. 不分片情况下,前端实现文件上传可能依次调用三个接口,分片情况下,文件时上传接口可能根据实际文件大小多次调用。
    1. 秒传检查接口
    2. 文件上传接口
    3. 业务数据存储接口
每日一句
Waste no more time arguing what a good man should be, be one. - Marcus Aurelius