0

Je veux savoir que ... Si je fais des morceaux d'un gros fichier Zip et que je télécharge tous les morceaux sur Azure Cloud Storage dans Container Blobs. Puis-je rejoindre ces blocs sur Azure Platform? pour Chunking je suis en utilisant ce code qui génère également le fichier .bat pour rejoindre les morceaux ..Télécharger des morceaux Zip et les rejoindre sur Azure Platform

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()); 
    } 
} 

Je suis en train de charger ces morceaux avec fichier batch dans le conteneur de stockage d'azur et je veux exécuter ce fichier batch à mon récipient azur pour joindre des morceaux. espère que cela aidera à comprendre ma question

Je me sers de ce code pour Téléchargement

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

Pourriez-vous décrire plus en détail la raison pour laquelle vous devez séparer les morceaux, les télécharger sur différents blobs, les télécharger, puis les rejoindre? Est-ce une question de perf ou d'une autre raison spécifique à l'application? –

+0

@Emily Parce que mon fichier est d'environ 10 Go, c'est pourquoi je fais des morceaux. Dans les morceaux, le téléchargement est facile avec une faible vitesse Internet. ou si j'ai besoin d'un téléchargement parallèle à l'avenir, l'aide sera complète. –

+0

Si vous utilisez la méthode de la bibliothèque client UploadFromStream (comme vous le voyez), elle sera tronquée pour vous et transférée en parallèle si vous définissez le facteur de parallélisme sur> 1. Y at-il une raison pour laquelle cela ne fonctionne pas pour vous? –

Répondre

0

Il sont deux choses:

  1. Si vous cherchez à zip les fichiers Stockage blob, c'est-à-dire télécharger des fichiers volumineux dans un stockage blob et attendre que le stockage blob y mette ces fichiers par zip, alors ce n'est pas possible. Le stockage de BLOB est un simple stockage de fichiers.
  2. Si vous avez un gros fichier zip que vous voulez télécharger en morceaux et que vous avez ensuite stocké des blocs blob pour réassembler ces blocs pour créer le fichier zip, alors c'est possible.

Puisque vous n'avez pas mentionné la technologie que vous voulez utiliser, j'utiliserai Azure REST API pour décrire le processus.

Ce que vous devez faire est de fractionner le fichier du côté client (d'où vous téléchargez) en morceaux. Chaque bloc ne peut pas mesurer plus de 4 Mo et, comme la taille maximale d'un bloc blob peut atteindre 200 Go, vous ne pouvez pas avoir plus de 50 000 blocs. Ensuite, vous allez télécharger ces blocs en utilisant l'API Put Block.

Une fois que tous les blocs ont été chargés, vous allez demander à l'espace de stockage BLOB de créer le fichier zip à l'aide de l'API Put Block List.

+0

Gaurav, j'ai un fichier zip de 10 gb et je fais des morceaux avec mon code qui crée aussi un fichier batch (.bat) pour rejoindre ces morceaux. Je télécharge ces morceaux et le fichier séquentiel sur le stockage de nuage bleu en utilisant le code de téléchargement simple. maintenant je veux exécuter ce fichier batch pour rejoindre les morceaux dans le conteneur azur où mes morceaux sont également téléchargés. c'est possible?? –

+0

Veuillez inclure votre code dans votre question afin que nous sachions ce que vous faites dans le fichier batch. Mais c'est possible. Jetez un oeil à l'opération «Put Block List». –

+0

le code est long à partager dans le commentaire ... –