2017-01-29 6 views
0

ここで説明されている紺色のメソッドを実装するためにこのチュートリアルを読んでいました。https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/put-blockブロックを識別する与えられた長さと同じサイズのベース64文字列を作成する

  1. 有効なBase64文字列値:

    は、この方法を実現するために、我々は、ブロックIDを必要とします。

  2. エンコードする前に、文字列のサイズは64バイト以下でなければなりません。
  3. 指定されたBLOBに対して、blockidパラメータに指定された値の長さは、ブロックごとに同じサイズでなければなりません。

Base64文字列はURLエンコードされている必要があります。その作者を達成するINORDERので

は言う:

「私は通常ちょうど は7文字の文字列にフォーマットされたブロックIDを使用して、1から何でもそれらを1番のためので、私は」。 "0000001"が得られます。 ブロックIDは基本64文字列でなければなりません。

と、このコードを使用しています。

string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("0000000")))); 

「0000000」にフォーマットすると23変換するには「0000023」を意味するのでさて、これは間違いなくBase64ではありませんが、どのように、彼女は条件2と 3を果たしているが、もっとして7桁の数字は、彼女はあなたが#3を見れば条件2

答えて

1

を満たすために64バイトの文字列を達成する ことができますどのように は3条件に違反しても、7桁の数字を考慮して、同じ元「999888777」、残ります、ブロックIDはsでなければならない長さあなたが使用している場合はこのように:

string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("0000000")))); 

あなたは、本質的に言っていることは、最大ブロックID(またはあなたの場合のブロック数)が9999999だろうということです。あなたはより多くの7つの文字(100000000から始まると言う9文字)よりもブロックIDを使用する必要があるだろうと考える場合は、次のようなコードを使用します。

string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("000000000")))); 

そして、すべてのブロックIDが同じであることになります長さ

選択したシーケンスは、そのシーケンス内の任意の数値を文字列に変換するときに、すべて同じ長さでなければなりません。私が言及したいと思います

いくつか他のものがあります:

  • ブロブのための50000個のブロックの最大が存在する場合があります。ブロックを50,000チャンク(ブロック)以上に分割してアップロードすることはできません。
  • ブロックがアップロードされたら、ブロック#999をアップロードしてからブロック#0をアップロードすることができます。重要なのは、コミットブロックリストのペイロードです。 blobストレージに構築されて保存される最後のブロブは、コミットブロックリストで指定されたブロックID順序に基づいています。私の作品は何

は(ブロックID番号は0からシーケンシャル数値始めていると仮定した場合)、次のコードです:

string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}",blockNumber.ToString("d6")))); 
+0

うん、私はあなたのコードはまた、JavaScriptを使用して見ました、あなたもこのすなわちようでした7桁を考慮してしかし、gauravはどのように文字列が64バイト以上であってはならないという条件を満たしていますか? –

+0

'しかし、gauravはどのように文字列が64バイトを超えてはならないという条件を満たしていますか? - この64バイトの制限は、base64でエンコードされた文字列、つまり基本文字列に変換される前です。だから、文字列を持つので、 'string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format(" BlockId {0} "、blockNumber.ToString(" d64 "))); 64バイトより大きい –

+0

そして、このコードをJavaに変換するとき、すなわち 文字列formattedID = "BlockId" + String.format( "%07d"、blockNumber); String blockId = Base64.getEncoder()。encodeToString(formattedID.getBytes( "utf-8")); 私は数字を7桁以上入力すると実際にその番号を許可します。私は50000の制限を知っているが、これを避ける方法は私のユーザーが誤って間違って行うことはありません。 –

関連する問題