开发者社区> 问答> 正文

oss 的文件夹是怎么实现的?

许多终端用户习惯了文件夹这个概念,而较难适应只有bucket和object的云存储逻辑。但我们可以基于OSS从逻辑上实现文件夹功能。
首先,我们可以按照惯例,认为所有以“/”结尾的Object都是一个文件夹。例如,用户认为:“folder”是一个文件;“folder/”是一个文件夹;而“folder/file.txt”是一个放在folder文件夹内名为file.txt的文件。在云存储OSS上,“folder/”、“folder”和“folder/file.txt”其实都是object。
当用户需要查询一个文件夹下的文件时,我们就需要巧妙地通过List Object(Get Bucket)接口的四个参数:prefix,marker,delimiter和max-keys来实现。
例如,我们在OSS上名为”mydata”的bucket内有如下几个文件:
lingyun.doc
folder/
folder/file1.txt
folder/file2.txt
folder/file3.txt
folder/image/
folder/image/test.jpg
如果认为这个bucket是一个传统文件系统的话,当用户进入该bucket,应该只看到一个名为“lingyun.doc”的文件和一个名为“folder/”的文件夹。为了获得这样的效果,我们将List Object请求的delimiter参数设为“/”即可,代码如下:
res = my_store.list_objects("mydata", delimiter='/')
OSS收到这个请求后,会返回一个XML格式的消息,中间记录了这个bucket内有一个key为“lingyun.doc”的文件,以及一个名为“folder”的commonprefix,分别对应于文件和文件夹。当继续想查看文件夹”folder”内的文件列表时,可以将prefix参数设为“folder/”,代码如下:
res = my_store.list_objects("mydata", prefix=’folder/’, delimiter='/')
执行后,我们就可以知道文件夹“folder”内,有三个文件:“file1.txt”,“file2.txt”,“file3.txt”和一个子文件夹:“image/”。
listobjects命令的另一个参数是max-keys,它定义了在一次请求内OSS返回文件和文件夹最大的数目,默认值是100,最大可以设成1000。但如果一个文件夹内有超过1000个文件怎么办?这时,可以利用listobjects的最后一个参数——marker。这个参数告诉OSS从指定的文件开始,按照字典序查其后面的文件。示例代码为:
res = my_store.list_objects("mydata", prefix='folder/', marker='folder/file1.txt', delimiter='/', maxkeys='1')
这时,OSS只会返回一个查询结果:“folder/file2.txt”。利用好这四个参数,你会发现做个类似于DropBox 的应用是如此的简单。

展开
收起
newegg11 2012-08-22 17:36:59 11773 0
4 条回答
写回答
取消 提交回答
  • Reoss的文件夹是怎么实现的?
    lz的代码很实际啊
    2013-04-20 16:20:14
    赞同 展开评论 打赏
  • Reoss的文件夹是怎么实现的?
    来点实际的,行么
    2013-02-27 15:19:45
    赞同 展开评论 打赏
  • Reoss的文件夹是怎么实现的?
    技术贴必须顶
    2012-08-29 03:29:22
    赞同 展开评论 打赏
  • 楼主今天发威了
    2012-08-22 22:01:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载