zoukankan      html  css  js  c++  java
  • 关于文件服设计的一些想法

    文件服务器需要满足以下几点:


    1 很多时候上传上去服务器的文件,在未点击保存按钮之前,该文件还未与业务关联(垃圾文件),这种文件需要 - 定时任务找出来并清除

    2 上传文件接口做:鉴权(调用权限,不能谁都往里面塞文件)、限频、限制文件大小、限制文件类型,并良好的错误反馈(准确提供上传接口调用失败的原因)

    3 下载文件要实现的:防止爬虫脚本拉取(鉴权 - 非常重要)、不可猜测拉取其他文件(不要文件访问标识用MySQL表主键那样有规律1、2、3的标识符号)、下载日志记录

    4 与业务分离- 使用token的形式鉴权,独立运行,不会因为业务要更新导致文件服宕机

    CREATE TABLE IF NOT EXISTS `common_file_list` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `file_origin_name` varchar(500) NOT NULL DEFAULT '' COMMENT '文件原名|hello.jpg',
      `file_basic_name` varchar(200) NOT NULL DEFAULT '' COMMENT '文件名|hello',
      `file_extend` varchar(30) NOT NULL DEFAULT '' COMMENT '文件扩展名|.jpg',
      `file_path` varchar(500) DEFAULT '' COMMENT '文件全路径|/data/hello.jpg',
      `file_size` varchar(500) DEFAULT '' COMMENT '文件大小|100',
      `file_type` varchar(500) DEFAULT '' COMMENT '文件类型|',
      `upload_time` datetime COMMENT '上传时间',
      `upload_user` varchar(50) DEFAULT '' COMMENT '上传人员',
      `business` varchar(50) DEFAULT '' COMMENT '关联业务',
      `business_hash` varchar(500) DEFAULT '' COMMENT '关联业务hash值',
      `memo` varchar(200) DEFAULT '' COMMENT '备注内容',
      `enable_flag` tinyint(1) unsigned DEFAULT 1,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='上传文件表' AUTO_INCREMENT=1;

    现在需要实现2个接口:

    A 文件上传接口(登录校验)

    xxx.com/common/upload

    B 文件访问接口 

    xxx.com/common/download?business=assess&business_hash=123

    文件访问接口不能以文件主表ID为访问依据,因为容易被猜测,爬虫爬取,一旦没有做好权限验证,就会被采集

    getFile?id=1,2,3 ... 应当以hash值访问,php uniqid函数那种无规律的hash值

  • 相关阅读:
    CentOS7.4 + Ambari 2.6.1.5 + HDP 2.6.4.0 安装部署
    分布式业务的异常解决思路
    RPC簡介
    网络I/O模型--07Netty基础
    网络I/O模型--06异步I/O
    网络I/O模型--05多路复用I/O
    网络I/O模型--04非阻塞模式(解除accept()、 read()方法阻塞)的基础上加入多线程技术
    网络I/O模型--03非阻塞模式(ServerSocket与Socket的超时处理)--解除accept()、 read()方法阻塞
    网络I/O模型--02阻塞模式(多线程)
    Android开发(五)——计时器
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/13883778.html
Copyright © 2011-2022 走看看