目录

1.25 FAQ

优质
小牛编辑
133浏览
2023-12-01

什么是FDS?

FDS是一种基于WEB的存储服务。向开发者提供高度可扩展、可靠的、低延时的存储基础设施。

FDS可以用来做什么?

FDS提供一个简单的Web服务接口,可用于存储和提取任意数量的数据,这些操作可从Web上的任何位置随时执行。

FDS可以存储那种类型的数据?

实际上可以存储任意类型的数据。用户以Object的形式将数据存储在FDS。下载时可以下载整个Object的内容,也可以只下载特定range的内容。

FDS为什么提供的是Restful API,而不是RPC?

FDS是一个基于Web的存储服务,提供Restful API可以使FDS很容易地和其它Web服务(比如CDN)集成在一起。用户也可以通过一个url分享自己存储在FDS上的文件,或在浏览器中展示存储在FDS上的文件。

什么是Region?

请参考基本概念。

什么是Object?什么是Bucket?

请参考基本概念。

我可以创建多少个Bucket?

一个开发者默认可以创建10个Bucket。如果需要创建更多的Bucket,请在控制台申请配额。

如何查看我的 DeveloerpId?

在WebConsole上任意Bucket的属性 > 所有者

如何查看我帐号的存储容量使用情况?

在WebConsole上点击进入Bucket页面,搜索空间配额

我可以存储多少数据?

一个开发者默认可以存储1G的数据。如果需要更大存储空间,请在控制台申请配额。 只要是小米开发者就可以访问FDS,为了防止资源浪费,所以设置了默认1G的存储空间限制。
开发者可存储的总数据量和Object个数没有限制。

一个Bucket中的容量有限制吗?

容量限制是以开发者为单位而不是以Bucket为单位统计的。

单个Object的大小有没有限制?

单个Object的大小没有限制。用户可以上传任意大小的Object。但FDS针对小文件做了优化,对100k左右的文件表现比较好。

什么是开发者?

开发者是在 http://dev.xiaomi.com 上注册,拥有访问小米云服务权限的用户。 访问FDS之前,必须注册小米开发者账号。

刚注册完帐号后,访问 WebConsole 无法正常显示

新注册开发者帐号后,请联系支持群里的管理员开通前端浏览权限。需要提供您的小米 ID

为什么我的Access Key不能创建Bucket

你用的Access Key是App Key,这种Key是不能创建Bucket的。只有开发者才能创建Bucket,开发者对应的Key是Account Key。你可以用Account Key或者在Web console上创建Bucket,然后将相应的权限赋给App Key。

我有一个Object的链接,打不开怎么办?

  • 在 WebConsole 上确认这个 Object 是否存在
  • 确认这个 Object 的访问权限是否正确设置。
  • 在支持群中请求帮助;提供您的链接,说明这个链接是如何产生的 (例如通过presigned url生成),您的 DeveloperId,使用的 Region,以及您下载这个 Object 时的错误信息

什么是public Bucket/Object?

Public Bucket/Object是指不用认证信息就可以访问的Bucket/Object。

什么是presigned url?

访问非public的Object需要认证信息。可以将签名信息放在URL的query parameter中,然后用该URL访问Object是就不需要额外的认证信息了。

什么是分片上传?

分片上传是指将Object分为多个分片,然后单独上传每个分片。对于大Object或网络状况不太好的场景,可以用分片上传实现断点续传。分片上传也可以用来实现并发上传。

FDS支持range请求吗?

支持。可以使用HTTP range header实现range请求。

误删Object后可以恢复吗?

Object删除后会被放在trash中,可以调用Restore Object API恢复被误删的Object。Object删除后在trash中保留7天。

为什么非空的Bucket不能删除?

因为删除包含有大量Objects的Bucket需要很长时间,客户端会超时。所以删除Bucket时要求Bucket是空的。

怎么清空一个Bucket?

可以循环调用DELETE Object或Delete multiple Objects来清空一个Bucket。

PUT和POST的区别是什么?

FDS PUT和POST的语义符合HTTP标注,PUT是覆盖,POST新建。

为什么我覆盖了一个Object后,下载到的还是旧的Object?

不带Authentication信息的下载请求会使Object在访问路径上被缓存,FDS默认缓存4分钟,CDN默认缓存1天。

为什么FDS获取缩略图请求返回415?

  1. 确认这个Object存在(去除thumb请求参数后是否能正常下载)
  2. 文件格式是否是jpg/png/gif
  3. 是否正确设置了content-type

FDS支持数据加密吗?

目前已经支持。

FDS支持跨Region的Bucket replication吗?

现在还不支持,将来会支持。

FDS和Amazon S3有什么区别?

FDS和S3是同一类类型的服务,API基本一致。

FDS java SDK 是线程安全的吗?

2.x 版本以上的 java SDK 中的 GalaxyFDSClient 类在多线程运行中没有被调用setDelimiter函数的话, 是线程安全的。

为什么我上传的视频无法在浏览器中播放?

需要把content-type设置正确才能播放。

怎么上传文件到文件夹?

FDS中文件夹是个虚拟的概念。Object名称中的'/'可以模拟出文件夹。例如2016/05/log这个object,2016和05都可以看作是文件夹。

如何查看我的developerId?

在console上对象存储 > 点击任意Bucket的属性 > 所有者对应内容

为什么我的文件名里有中文的时候,上传会返回403?

如果非中文的文件名是可以上传/下载的,可以检查一下传入的中文是否多做了转义。

我可以指定上传的object的名字吗?

上传请求分两种:

  1. PUT请求,可以指定Object的名字。
  2. POST请求,无法指定Object的名字,FDS会在响应中返回为这个Object生成的唯一名字。

通过POST上传的Object,可以通过通过rename接口修改名字,参考java SDK renameObject方法。

上传Object的是否是否一定要指定MD5?

如果上传的时候指定了MD5,服务端在收到Object的时候会做相应的检查。如果MD5不一致,那么上传操作会失败。

上传较大文件的时候经常失败,怎么办?

上传大文件推荐使用分片上传。

我重新上传了文件,但是从console上下载到的还是旧文件,是为什么?

前端可能有缓存,确认清空缓存再尝试下载

为什么我上传Object的时候提示Bucket不存在?

  1. 确认已经创建了Bucket
  2. 确认使用的集群是一致的

如何把Bucket的读/写权限授权给某个appId?

  1. 开发者站点上注册为开发者
  2. 在开发者站点 > 左上角用户名 > 密钥中心 > 云服务密钥 创建新密钥
  3. 在console上需要授权的Bucket > 属性 > 用户权限 > 添加。其中Grantee填入在第2步中生成的AppID。

我希望其他人可以读取我Bucket下的所有文件,应该怎么办?

在Bucket > 属性 > 组权限 > 添加 > ALL_USER 勾选 Read。

我在命令行用curl上传Object失败,是为什么?

确认上传命令中的url是否用单引号'引起,避免命令行转义。

如何在FDS上创建目录?

FDS没有目录的概念,我们的WebConsole做了显示上的特殊处理。你可以直接上传一个名字是foo/bar.txt的文件,在console上就会看到有foo"目录",点击后可以看到文件bar.txt

4xx 5xx 状态码的含义

FDS http请求返回的状态码与http标准语义一致

403 状态码的含义

  • 403 是没有权限的意思,访问 Bucket/Object 需要有相应的访问权限,需要让 Bucket/Object 拥有者给你赋予相应的权限。
  • 可以参考基本概念查看有关授权的详细信息。

429 状态码的含义

  • 429 表示请求量太大。FDS里所有的Bucket均分所有资源。如果你的请求量导致其他用户无法获得均分的资源,FDS将会返回429状态码。
  • 如果出现429,您可以在console上Bucket的统计页面看到这个Bucket的请求量。

为什么我bucket下有object,调用listobject(bucket, prefix)却无结果?

listobject 的delimiter默认为/, 如果想获取所有bucket下的所有object,应该设置delimiter为空字符串,如下

listObject(bucket, "", "");

当bucket下的object非常多,该如何列出所有object?

listobject接口默认最多返回1000个object,当bucket下object过多时,需要用到listNextBatchOfObjectslistNextBatchOfObjects的作用是根据上次结果继续list。其输入为FDSObjectListing。 Java 用例:

for (FDSObjectListing objectListing = fdsClient.listObjects(BUCKET_NAME, PREFIX, ""); objectListing != null;
     objectListing = fdsClient.listNextBatchOfObjects(objectListing)) {
  //do something
  if (!objectListing.isTruncated()) {
    break;
  }
}

预签名上传时,为什么会返回403?

确认签名时的Method、ContentType与使用时一致,参考Presigned URL的note

如何通过预签名上传时,设置object为public?

参考 Presigned URL的note