Azure 存储 - 公开具有文件结构的容器
Azure Storage - Exposing A Container With A File Structure
我正在尝试上传一个文件夹结构,其中包含一个 html 文件,该文件引用该文件夹结构中的 css 和 javascript 文件,在私有的 Azure blob 存储中容器。
当浏览到 html 文件时,我希望它检索 css 和 javascript 文件,就像您查看它是否是 html 文件作为网站的一部分。
如果容器完全 public,我可以完成这项工作,但是当容器是私有的并且我提供 SAS 令牌时,我很难获得相同的结果。
假设容器包含一个名为 "main.html" 的 html 文件和一个名为 "css/mystyles.css" 的 css 文件(main.html 将具有 link css 文件的标记指向以下相对 url "css/mystyles.css").
如果我为容器创建一个 SAS 令牌(为简单起见,我们将其称为 "mySAS"),然后导航到 main.html 文件,像这样附加 SAS 令牌:
https://my-storage-account.blob.core.windows.net/container-name/main.html?mySAS
main.html 文件将正确加载,因为 SAS 令牌将附加在末尾,但是 css 文件不会,因此它将 return 一个 404。
我想我已经知道答案了,但在技术上是否可以存储和呈现 html 文件及其所有关联文件而不将其放入 public 容器中?
我应该注意,修改 html 文件中指定的路径不是一个选项,因为它们是我无法控制的文件,所以我不知道它们在未来会是什么样子的时间。
有一些(非常混乱和不受欢迎的)混合解决方案,我将它放在一个私有容器中,然后按需public并在一段时间后将其切换回私有容器。
或者寻求更极端的混合解决方案,我将其存储在一个私有容器中(永远不会公开),然后无论何时请求,都将内容复制到一个短暂的 public 容器中(减少有人可能会在第一个混合场景中记下 public 容器,然后在可能不打算对他们可用时再次访问它。
如果可能的话,我真的宁愿坚持使用私有容器和 SAS 令牌解决方案。
如果您的问题是关于重复使用 SAS 令牌:您不能。你必须生成一个 URL+SAS 组合,而 SAS 是基于 URL 的散列。您不能只创建一次 SAS 令牌,然后将其附加到 URL。否则,没有什么能阻止某人猜测 URLs 并将一个 URL 的 SAS 附加到另一个 URL.
如果目标是拥有一个没有后端逻辑的静态站点,那么您需要拥有您的内容 public(或者您必须预先生成所有 URL已正确附加 SAS)。
如果您想要动态访问(例如,您不知道将提供什么内容),您需要有某种类型的后端应用服务器来提供内容(例如,returns 一个新的 html 页面,在各种标签中嵌入了适当的基于 SAS 的链接。
我正在尝试上传一个文件夹结构,其中包含一个 html 文件,该文件引用该文件夹结构中的 css 和 javascript 文件,在私有的 Azure blob 存储中容器。
当浏览到 html 文件时,我希望它检索 css 和 javascript 文件,就像您查看它是否是 html 文件作为网站的一部分。
如果容器完全 public,我可以完成这项工作,但是当容器是私有的并且我提供 SAS 令牌时,我很难获得相同的结果。
假设容器包含一个名为 "main.html" 的 html 文件和一个名为 "css/mystyles.css" 的 css 文件(main.html 将具有 link css 文件的标记指向以下相对 url "css/mystyles.css").
如果我为容器创建一个 SAS 令牌(为简单起见,我们将其称为 "mySAS"),然后导航到 main.html 文件,像这样附加 SAS 令牌:
https://my-storage-account.blob.core.windows.net/container-name/main.html?mySAS
main.html 文件将正确加载,因为 SAS 令牌将附加在末尾,但是 css 文件不会,因此它将 return 一个 404。
我想我已经知道答案了,但在技术上是否可以存储和呈现 html 文件及其所有关联文件而不将其放入 public 容器中?
我应该注意,修改 html 文件中指定的路径不是一个选项,因为它们是我无法控制的文件,所以我不知道它们在未来会是什么样子的时间。
有一些(非常混乱和不受欢迎的)混合解决方案,我将它放在一个私有容器中,然后按需public并在一段时间后将其切换回私有容器。
或者寻求更极端的混合解决方案,我将其存储在一个私有容器中(永远不会公开),然后无论何时请求,都将内容复制到一个短暂的 public 容器中(减少有人可能会在第一个混合场景中记下 public 容器,然后在可能不打算对他们可用时再次访问它。
如果可能的话,我真的宁愿坚持使用私有容器和 SAS 令牌解决方案。
如果您的问题是关于重复使用 SAS 令牌:您不能。你必须生成一个 URL+SAS 组合,而 SAS 是基于 URL 的散列。您不能只创建一次 SAS 令牌,然后将其附加到 URL。否则,没有什么能阻止某人猜测 URLs 并将一个 URL 的 SAS 附加到另一个 URL.
如果目标是拥有一个没有后端逻辑的静态站点,那么您需要拥有您的内容 public(或者您必须预先生成所有 URL已正确附加 SAS)。
如果您想要动态访问(例如,您不知道将提供什么内容),您需要有某种类型的后端应用服务器来提供内容(例如,returns 一个新的 html 页面,在各种标签中嵌入了适当的基于 SAS 的链接。