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值

  • 相关阅读:
    重新开始Blog生活
    google疯了
    用RJS写的检测用户名和email是否存在
    如何在Postgresql中产生自己的集合function
    Sendonly Mail Server with Exim on Ubuntu 10.04 LTS
    碰巧遇到一些智力面试题,解答一下
    ajax check username available in rails
    准备用C#写一个Blog的客户端,大家看看功能缺哪些,哪些不需要?
    关于 Laravel项目多进程队列配置的使用
    电子围栏软件系统开发方案
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/13883778.html
Copyright © 2011-2022 走看看