2011-12-21 11 views
5

Mam pliki przechowywane w jednym kontenerze na koncie magazynu blob. Potrzebuję utworzyć plik zip w drugim kontenerze zawierającym pliki z pierwszego kontenera.Tworzenie pliku zip in situ w magazynie błękitu BLU

Mam rozwiązanie, które działa przy użyciu roli pracownika i DotNetZip, ale ponieważ plik zip może mieć rozmiar 1 GB Obawiam się, że wykonywanie wszystkich prac w toku przy użyciu obiektów MemoryStream itp. Nie jest najlepszym sposobem robienia tego. Moim największym zmartwieniem jest wykorzystanie pamięci i uwalnianie zasobów, ponieważ proces ten może odbywać się kilka razy dziennie.

Poniżej kilka bardzo okrojona kod pokazujący podstawowy proces w roli pracownika:

using (ZipFile zipFile = new ZipFile()) 
{ 
    foreach (var uri in uriCollection) 
    { 
     var blob = new CloudBlob(uri); 

     byte[] fileBytes = blob.DownloadByteArray(); 

     using (var fileStream = new MemoryStream(fileBytes)) 
     { 
      fileStream.Seek(0, SeekOrigin.Begin); 

      byte[] bytes = CryptoHelp.EncryptAsBytes(fileStream, "password", null); 

      zipFile.AddEntry("entry name", bytes); 
     } 
    } 

    using (var zipStream = new MemoryStream()) 
    { 
     zipFile.Save(zipStream); 
     zipStream.Seek(0, SeekOrigin.Begin); 

     var blobRef = ContainerDirectory.GetBlobReference("output uri"); 
     blobRef.UploadFromStream(zipStream); 
    } 

} 

Może ktoś sugerują lepsze podejście proszę?

+0

+1 za używanie łaciny. ;) – TrueWill

+0

Tak, wykorzystanie zasobów jak pamięć, procesor w usługach w chmurze webrole/workrole jest zawsze zainteresowany. Warto się nad tym zastanowić. +1 –

Odpowiedz

3

W czasie pisania tego pytania nie wiedziałem o opcjach LocalStorage dostępnych na platformie Azure. Byłem w stanie napisać pliki indywidualnie do tego i pracy z nimi w LocalStorage, a następnie zapisać je z powrotem do magazynu blob.

+2

Czy istnieje jakaś szansa na jakieś wyjaśnienie/przykład? To naprawdę nie jest odpowiedź – stuartdotnet

+1

znaleźć przykład tutaj http://stackoverflow.com/a/18853179/1280068 – stuartdotnet

1

Jeśli martwisz się, aobut jest twoim pamiętnikiem, zabierającym zbyt dużo pamięci, to możesz zaimplementować własny strumień i podczas odczytywania strumienia dodajesz swoje pliki zip do strumienia i usuwasz już przeczytane pliki ze strumienia. Spowoduje to utrzymanie rozmiaru strumienia pamięci do rozmiaru jednego pliku.

+0

dowolny przykład kodu? –

Powiązane problemy