【问题标题】:Is it possible to generate a public URL for a file on an EMC Atmos cloud storage system?是否可以为 EMC Atmos 云存储系统上的文件生成公共 URL?
【发布时间】:2012-08-16 14:45:06
【问题描述】:

我有一个应用程序,允许用户使用 CSS 和其他项目自定义网站。创建这些文件后,它们将存储在 Amazon S3 上,可供公众阅读。因此,我一直能够使用静态 url 来引用它们,而无需我首先连接到 S3 来生成 URL。

我们已将所有文件移至位于我们托管公司数据中心内的 EMC Atmos 系统。我知道如何从 Atmos 生成可共享的 URL,但只能通过首先建立连接。 Atmos 有没有办法在对象上设置系统元数据,以便可以使用静态 URL 引用它?

【问题讨论】:

    标签: emc


    【解决方案1】:

    您无需连接到 Atmos 即可生成可共享的 URL。可共享 URL 的生成总是发生在客户端;它不会通过 HTTP 发生。

    Atmos 系统元数据始终是不可变的。您可以使用可共享的 URL 生成“静态 URL”,并将过期设置为遥远的将来。

    【讨论】:

    • 不幸的是,在 Ruby 接口中,get_shareable_url 是一个实例方法。
    • 你能解释一下这是如何导致问题的吗? get_shareable_url() 是一个实例方法,但它实际上并没有连接到 Atmos 来生成可共享的 URL。可共享的 URL 是预先签名的;这一切都发生在包装器本身内。
    • 也许这不是问题。只是实例化 EsusRestApi 对象调用了这一行:@session = Net::HTTP.new(host, port).start,看起来好像正在建立某种会话。
    • 它必须构建 URI 以返回预签名的 URL,但如果您注意到它实际上并没有像其他方法那样调用 build_request() 或 @session.request()实际通过 HTTP 发送请求。
    • 相信我:它不会向 Atmos 发送 HTTP 请求来生成可共享的 URL。运行 Wireshark/Fiddler/Charles 亲自查看。它必须使用主机、端口等才能通过这些组件向您返回可共享的 URL,但它不会通过 HTTP 交互来创建 URL。
    【解决方案2】:

    EMC Atmos 不需要 HTTP/HTTPS 连接来生成可共享的 URL。它确实建立一个 HTTP 连接来生成文件,但它可以由存储在云上的文件的最终用户来完成。

    要创建 URL,需要在应用程序客户端进行签名(不需要 HTTP 连接)。原因是因为生成了唯一的签名。

    要发送签名,您可以将签名放入 URL:

    $url = "http://$server$resource?uid=$uid&expires=$expires&signature=$signature";
    

    或者不是将签名放在 URL 中,而是通过 REST API 通过发布 x-emc-signature 的 HTTP 标头来发送它。

    因此,一旦您生成了该 URL,您就可以通过电子邮件或文本将其发送给其他人,他们可以稍后单击它们,只要该 URL 没有过期,它就会有效。

    EMC Atmos 验证签名后,会将下载内容发送到客户端。请注意,系统时钟关闭超过 5 分钟的服务器将无法生成可共享 URL,因此请使用 NTP 守护进程在生成可共享 URL 的应用程序上保持时间同步。

    因此,澄清一下,EMC Atmos 不需要与您的云存储提供商建立 HTTP 连接。 HTTP 连接在第一次请求文件时完成。届时该文件将公开可用。

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 2016-08-29
      • 2017-10-03
      • 2014-01-28
      • 2012-04-20
      • 2021-09-08
      • 1970-01-01
      • 2013-10-09
      • 2019-08-11
      相关资源
      最近更新 更多