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值

  • 相关阅读:
    RandomAccessFile类
    IO_ObjectOutputStream(对象的序列化)
    IO流_文件切割与合并(带配置信息)
    IO流_文件切割与合并
    IO流_SequenceInputStream(序列流)
    10-stack
    9-queue
    16-两种方法全排列
    8-全排列next_permutation
    15-Call to your teacher(有向图的连通判断)
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/13883778.html
Copyright © 2011-2022 走看看