如何编码以句点结尾的blob名称?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编码以句点结尾的blob名称?相关的知识,希望对你有一定的参考价值。
避免使用以点(。),正斜杠(/)或两者的序列或组合结尾的blob名称。
由于传统的s3兼容性,我无法避免这样的名称,因此我必须对它们进行编码。
我应该如何编码这样的名字?
我不想使用base64,因为这样在查看azure的blob控制台时会很难调试。
去有https://golang.org/pkg/net/url/#QueryEscape但它有this limitation:
从Go的url.QueryEscape(特别是shouldEscape私有函数)的实现中,除了以下字符之外的所有字符都会转义:字母,十进制数字,' - ','_','。','〜'。
我不认为在您的应用范围之外有任何通用解决方案来处理这个问题。在您的应用程序范围内,您可以执行任何编码,因此您可以根据个人喜好来确定数据的布局方式。没有“正确”的方法来做到这一点。
无论如何,我相信你应该选择这些属性:
- 转换必须是双向的,并且在预期的文件名空间中没有冲突
- 请保留文件名,不要以未编码的结尾点
- 对于点结尾文件,DO只编码冲突点,保持原始名称可读。
这将使大多数(非冲突的)文件保持简短并且具有原始的直观或希望有意义的名称,并且如果您能够重命名或逐步淘汰冲突的文件,只需删除转换逻辑,而无需重构所有存储的数据及其URL。
我会建议2个例子。让我们建议你有文件:
/someParent/normal.txt
/someParent/extensionless
/someParent/single.
/someParent/double..
使用特殊的子容器
您可以从文件名末尾删除N个点,并将它们转换为子容器名称“dot”,“dotdot”等。
结果网址希望:
/someParent/normal.txt
/someParent/extensionless
/someParent/dot/single
/someParent/dotdot/double
阅读时,您可以删除“点”* N文件夹级别并将N点附加回文件名。显然,这假设您不需要将这样的“点”文件夹作为数据本身。
如果存储的文件可以带有任何扩展名,但是您可以对文件夹结构做出一些假设,那么这是首选。
使用可丢弃的人工延伸
由于冲突结束,您可以将一个从未使用的虚拟扩展附加到给定文件。例如“endswithdots”,但您可以根据预期的扩展名选择更合适的内容:
/someParent/normal.txt
/someParent/extensionless
/someParent/single.endswithdots
/someParent/double..endswithdots
在读取文件扩展名是“endswithdots”时,从文件名末尾删除“endswithdots”部分。
如果您的数据可以具有任何容器结构,但您可以对传入的扩展进行一些假设,则首选此选项。
我建议不要使用Base64或其他全名编码,因为它会使文件名显着更长,并丢失文件名可能包含的任何有意义的细节。
以上是关于如何编码以句点结尾的blob名称?的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致 LIKE 语句忽略 html 标记、逗号后的单词或以句点结尾?
如何创建指向字段名称中带有句点的 SQL Server 视图的 Jet ODBC 链接?