【问题标题】:Correct way to escape an Azure Storage Blob Name转义 Azure 存储 Blob 名称的正确方法
【发布时间】:2015-01-26 01:49:18
【问题描述】:

我正在将文件从 Windows 系统上传到 Azure 存储 Blob

本地文件名可能包含在 blob 名称中无效的字符

我需要一种对这些名称进行编码的方法,以满足 MSDN 对 blob 存储名称提出的要求,如下所示

blob 名称必须符合以下命名规则:

  • blob 名称可以包含任意字符组合。
  • Blob 名称的长度必须至少为一个字符,并且长度不能超过 1,024 个字符。
  • Blob 名称区分大小写。
  • 必须正确转义保留的 URL 字符。
  • 包含 blob 名称的路径段数不能超过 254。路径段是与名称对应的连续分隔符(例如,正斜杠“/”)之间的字符串 的虚拟目录。

上面的相关信息是“保留的URL字符必须正确转义。但是,使用什么方法是“标准”?

【问题讨论】:

  • 几乎所有我的项目,我都使用 GUID 作为 blob 名称(带有其原始 extname),并将其原始名称映射到表、SQL 数据库或 blob 的元数据中。你考虑过这个解决方案吗?个人认为它比直接使用客户端文件名更好,因为它给了我们更多的灵活性。
  • 对于另一个项目,我们这样做并且效果很好,但是这个项目与专用的缩减 ftp 服务器工作人员角色相关联,我需要保持名称完整,转义似乎是合适的在这种情况下
  • 感谢您的澄清。所以这是另一种情况,请忽略我下面的“离题”评论。
  • 您是使用存储客户端库还是编写了自己的代码以使用 REST API 进行上传?
  • 如果您使用的是存储客户端库,那么我认为您无能为力。该库在内部进行 URL 编码,您将不得不忍受它。如果您对 blob 名称进行编码,然后将其发送到库,它将再次对其进行编码,因此您的 blob 名称将不正确。

标签: .net azure azure-functions azure-blob-storage


【解决方案1】:

你可以使用Uri.EscapeUriString(yourStringToEscape)

docs here

您仍然必须手动执行其他操作,即长度和路径段等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2016-10-10
    • 2021-06-19
    • 2015-02-14
    相关资源
    最近更新 更多