V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tuine
V2EX  ›  程序员

对象存储既然没有目录概念,那浏览器端的树状结构怎么实现的?

  •  
  •   tuine · 2020-08-12 19:51:13 +08:00 · 3683 次点击
    这是一个创建于 1345 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没有目录的概念,ListObjects 会列出所有的文件
    阿里云、minio 等浏览器端访问所展示的树状目录结构是怎么实现的?

    第 1 条附言  ·  2020-08-13 11:45:59 +08:00

    可能没描述清楚,好多人误解了我的意思。看了下delimiter的定义就豁然开朗了!

    A delimiter is a character you use to group keys. 用于对对象键进行分组。所有对象键中从 prefix 或从头(如未指定 prefix)到首个 delimiter 之间相同的部分将作为 CommonPrefixes 下的一个 Prefix 节点,被分组的对象键不再出现在后续对象列表中。

    从prefix到收个delimiter进行分组

    14 条回复    2020-08-13 09:39:20 +08:00
    xgfan
        1
    xgfan  
       2020-08-12 19:58:11 +08:00
    找到 key,按 /进行 split,不就 ojbk 了吗?
    tuine
        2
    tuine  
    OP
       2020-08-12 20:02:15 +08:00
    @xgfan 不是这个意思。比如我想知道根目录有哪些文件及目录?
    AlisaDestiny
        3
    AlisaDestiny  
       2020-08-12 20:16:54 +08:00
    很明显,你这是把 OOS 当网盘用了,如果你是想把一个项目的文件归类,那么把文件名按一定规则存就行了。
    如果你是想区分项目,那么新建 bucket.
    tuine
        4
    tuine  
    OP
       2020-08-12 20:35:12 +08:00
    @AlisaDestiny 再用 minio 浏览器端过程中突然想到了,有点好奇
    calmzhu
        5
    calmzhu  
       2020-08-12 22:44:33 +08:00
    跟操作系统一样的
    数据是一个文件,
    目录文件也是一种文件。
    monsterxx03
        6
    monsterxx03  
       2020-08-12 22:58:39 +08:00
    一般 api 里会支持 delimiter 参数, 传 delimiter=/ , 就能达成你要的效果了, 比如 openstack swift: https://docs.openstack.org/zh_CN/user-guide/cli-swift-pseudo-hierarchical-folders-directories.html
    opengps
        7
    opengps  
       2020-08-12 23:00:14 +08:00 via Android
    学习对象存储的最好方式是看官方帮助文档,你要的答案可以参考阿里云 oss 帮助文档 https://help.aliyun.com/document_detail/130345.html?source=5176.11533457&userCode=ta5rjs45&type=copy
    找 OSS 的数据是如何组织的? 章节介绍
    polythene
        8
    polythene  
       2020-08-12 23:36:20 +08:00
    同样的道理,etcd 存的也是个扁平的 key-value 结构,但用户用的时候可能有一些逻辑上的层次关系,把这个层次关系分隔出来,就能对应到操作系统的文件和文件夹的关系了,可以参考我的这个项目 https://github.com/polyrabbit/etcdfs
    bbao
        9
    bbao  
       2020-08-12 23:49:33 +08:00
    @tuine minio 商用提供 web 服务,不购买 license 的话,所有涉及的代码需要开源哟。
    lc7029
        10
    lc7029  
       2020-08-13 01:06:17 +08:00
    目录当成文件名
    laminux29
        11
    laminux29  
       2020-08-13 01:47:28 +08:00
    非常简单啊,3 步骤:
    1.定义一个分隔符号字符串。
    2.文件名不允许使用分隔符号。
    3.最终文件名等于当前父路径 + 文件名。
    widewing
        12
    widewing  
       2020-08-13 02:57:06 +08:00 via Android
    先全部列出来,然后过滤,就这样。所以数量多了效率不行
    zhxhwyzh14
        13
    zhxhwyzh14  
       2020-08-13 08:39:19 +08:00
    腾讯云的对象存储有目录
    tuine
        14
    tuine  
    OP
       2020-08-13 09:39:20 +08:00
    @laminux29 一语惊醒梦中人,重新看了下分隔符的定义,豁然开朗。感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5717 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:11 · PVG 10:11 · LAX 19:11 · JFK 22:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.