.net 转义Azure存储Blob名称的正确方法

.net 转义Azure存储Blob名称的正确方法,.net,azure,azure-functions,azure-storage-blobs,.net,Azure,Azure Functions,Azure Storage Blobs,我正在将文件从windows系统上载到Azure存储Blob 本地文件名可能包含blob名称中无效的字符 我需要一种编码这些名称的方法,以满足MSDN对blob存储名称的要求,如下所示 blob名称必须符合以下命名规则: blob名称可以包含任意字符组合 blob名称的长度必须至少为一个字符,且不能超过1024个字符 Blob名称区分大小写 保留的URL字符必须正确转义 包含blob名称的路径段数不能超过254。路径段是与名称对应的连续分隔符字符(例如正斜杠“/”)之间的字符串 虚拟目录的名称

我正在将文件从windows系统上载到Azure存储Blob

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

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

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

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

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

您可以使用
Uri.EscapeUriString(yourStringToEscape)


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

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