我正在阅读本教程https://www.simple-talk.com/cloud/platform-as-a-service/azure-blob-storage-part-4-uploading-large-blobs/,以实现此处所述的天蓝色方法https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/put-block。
为了实现这个方法,我们需要一个块id:
请注意,Base64字符串必须是URL编码的。
所以为了达到那个作者所说:
"我通常只使用块ID将它们从1编号为任何值 格式化为7个字符的字符串。所以对于1,我会得到“0000001”。 请注意,块id必须是基本的64字符串。"
并使用此代码:
string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("0000000"))));
现在,毫无疑问这是Base64,但她如何实现条件2和 3.因为格式化为" 0000000"意思是23转换为" 0000023"但超过7位的数字将保持不变前#9; 999888777"哪一个 违反3条件,并考虑7位数,她是如何能够的 实现条件2的64字节字符串。
答案 0 :(得分:1)
如果你看#3,那么块id必须是相同的长度。因此,如果您使用:
string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("0000000"))));
您基本上说的是,最大块ID(或您的案例中的块号)将为9999999
。如果您认为需要使用超过7个字符的块ID(比如从100000000开始的9个字符),那么您将使用如下代码:
string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("000000000"))));
然后所有块id将具有相同的长度。
无论您选择哪种顺序,您只需确保在将该序列中的任何数字转换为字符串时,所有这些数字必须具有相同的长度。
我想提及的其他一些事情是:
对我来说有用的是以下代码(假设块ID号是从0开始的连续数字):
string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("d6"))));