0

我想知道如果我製作一個大Zip文件的塊並將所有塊上載到Container Blob中的Azure雲存儲上。我可以在Azure平臺上加入這些塊嗎? 爲分塊我使用這個代碼也產生.bat文件用於重新加入塊..上傳Zip塊並在Azure平臺上加入它們

public void SplitFile(){ 
    int numericUpDown = 100;//in MB 
    string PathToCopyChunks = ""; // path to store chunks and (.bat ) file 
    string FilePathMakeChunks = DirectoryNameToPutScannedData; //the path of file to make chunks. 
    try{ 
     int kbs = numericUpDown * 1024; 
     int chunkSize = numericUpDown * 1024 * 1024; 
     byte[] buffer = new byte[4096]; 
     string cmdout = "copy/b "; 
     FileStream infile = File.OpenRead(FilePathMakeChunks); 
     for (long i = 0; i <= infile.Length/chunkSize; i++) 
     { 
      string fname = Path.Combine(PathToCopyChunks, Path.Combine(PathToCopyChunks, Path.GetFileName(FilePathMakeChunks)) + "." + chunkSize + "." + i.ToString().PadLeft(4, '0') + ".part"); 
      string fname_x = Path.GetFileName(FilePathMakeChunks) + "." + chunkSize + "." + i.ToString().PadLeft(4, '0') + ".part"; 
      if (i == infile.Length/chunkSize) 
       cmdout += "\"" + fname_x + "\""; 
      else 
       cmdout += "\"" + fname_x + "\" + "; 
      FileStream outfile = File.Create(fname); 
      for (int kb = 0; kb <= kbs; kb++) 
      { 
       int len = infile.Read(buffer, 0, 1024); 
       outfile.Write(buffer, 0, len); 
      } 
      outfile.Close(); 
     } 
     cmdout += " \"" + Path.GetFileName(FilePathMakeChunks) + "\""; 
     string combinerbatch = Path.Combine(PathToCopyChunks, Path.Combine(PathToCopyChunks, Path.GetFileName(DirectoryNameToPutScannedData)) + "." + chunkSize + ".combine.bat"); 
     File.WriteAllText(combinerbatch, cmdout); 
     MessageBox.Show("Splitting Done...!"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

我在Azure存儲容器批處理文件上傳沿着這些塊,我想在運行這個批處理文件我的天藍色容器加入大塊。 希望這將有助於理解我的問題

,我使用這個代碼上傳

string[] array1 = Directory.GetFiles(@"D:\Test"); 
string fileName = string.Empty; 
foreach (string name in array1) 
{ 
    fileName = Path.GetFileName(name); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 
    var fileStream = System.IO.File.OpenRead(name); 
    blockBlob.UploadFromStream(fileStream); 
} 
+0

你能否更詳細地描述你需要分開塊,上傳到不同的斑點,下載,然後重新加入的原因?這是一個性能問題還是其他特定於應用程序的原因? –

+0

@Emily因爲我的文件大約是10 GB,這就是爲什麼我要分塊。在大塊上傳很容易與低互聯網速度。或者如果我將來需要並行上傳,那麼它會幫助完整。 –

+0

如果使用客戶端庫UploadFromStream方法(就像我看到的那樣),如果將並行度因子設置爲> 1,則會爲您並行上傳並行上傳。有沒有理由不適合你? –

回答

0

這裏有兩種東西:

  1. 如果您正在尋找在壓縮文件blob存儲,即在blob存儲中上傳大文件,並期望blob存儲在那裏壓縮這些文件,那麼這是不可能的。 Blob存儲是簡單的文件存儲。
  2. 如果你有一個大的zip文件,你想上傳塊,然後有blob存儲重新組裝這些塊來創建zip文件,那麼這是可能的。

由於您沒有提及要使用的技術,因此我將使用Azure REST API來描述該過程。

你需要做的是將文件分割成客戶端(從你上傳的地方)。每個塊的大小不能超過4MB,並且由於塊blob的最大大小可能爲200GB,因此不能有超過50,000個塊。然後,您將使用Put Block API上傳這些塊。

一旦上傳所有塊,您將指示Blob存儲使用Put Block List API創建zip文件。

+0

Gaurav,我有10 GB的zip文件,我用我的代碼塊也創建批量(.bat)文件來重新加入這些塊。我使用簡單的上傳代碼將這些塊和批處理文件上傳到天藍色雲存儲上。現在我想運行該批處理文件來重新加入我的區塊也上傳的天藍色容器中的塊。可能嗎?? –

+0

請在您的問題中包含您的代碼,以便我們知道您在批處理文件中所做的操作。但這是可能的。看看'放置阻止列表'操作。 –

+0

代碼是要在評論中分享... –