5

Ich habe eine Worker-Rolle, die ich verwende, um Daten von Blob Storage OnStart herunterzuziehen. Derzeit teste ich das, indem ich eine test.txt-Datei hochlade und sie dann in ein lokales Verzeichnis herunterlade. Das funktioniert gut.Wie lade ich einen Ordner auf Blob Storage hoch?

Ich möchte jetzt einen Ordner auf Blob-Speicher hochladen. Dieser Ordner enthält ein Stapel-Skript sowie mehrere ausführbare Dateien, die vom Stapel-Skript aufgerufen werden.

Was ist der empfohlene Weg, dies zu erreichen? Ich denke, das Zippen des Ordners und das Hochladen der * .zip-Datei wäre einfach ... aber sobald ich es lokal für die Worker-Rolle herunterladen möchte, wie würde ich es ohne Bibliotheken von Drittanbietern entpacken?

Wenn es bessere Möglichkeiten gibt, bin ich für irgendwelche Vorschläge offen. Danke für die Hilfe hier - diese Community war eine große Hilfe für mich, als ich rampe :)

+0

Warum nicht einfach die einzelnen Dateien hochladen? Die Lagerung ist billig. – Paparazzi

+0

Ich sollte bemerkt haben, dass es auch einen Projektordner gibt, der Hunderte von Dateien und anderen Ordnern enthält. Ich möchte in der Lage sein, den gesamten Inhalt des Containers unter Beibehaltung von Ordnern, Dateinamen usw. herunterzuladen. Ist das möglich? – RobVious

+0

Bitte definieren Sie Pull-Daten nach unten. Sie benötigen diese für die Rolle des Arbeiters, oder Sie müssen diese Dateien auf den Client herunterladen? Oder etwas anderes? – Paparazzi

Antwort

2

Sie können zwei Ansätze: Single-Datei (zB Zip) oder Multi-Datei (mit jeder Datei in einem eigenen Blob). Hier ist mein nehmen auf sie, dann einer Notiz unzipping:

einzige ZIP-Datei

Dies ist eine sehr einfache Möglichkeit, einen gruppierten Satz von Dateien zu erhalten, wie ein Apache installieren, oder eine Reihe von statischen Ressourcen . Das Herunterladen aus einem Blob in den lokalen Speicher ist äußerst einfach. Und eine Zip-Datei kann jede Ebene verschachtelter Verzeichnisse verarbeiten.

Nachteil: Um eine einzelne Datei zu aktualisieren, müssen Sie eine neue Zip erstellen; keine Möglichkeit, einfach ein modifiziertes Asset hochzuladen.

einzelnen Blobs

Separate Blobs sind groß, wenn Sie schnell einzelne Dateien aktualisieren müssen, ohne sich um andere Dateien zu kümmern. Sie können auch direkt auf diese Blobs verweisen, egal ob öffentlich oder (mit Shared Access-Signatur), private und eingebettete Links in Webseiten usw. Sehen Sie sich meine Antwort here, sowie @ Sandrinos an, für Beispiele. Oh, und wenn Sie planen, Blobs über CDN zu exponieren, müssen sie in einzelnen Blobs sein.

Nachteil: Keine absolute Zuordnung zu verschachtelten Verzeichnissen. Der Blobspeicher ist nach account \ container \ blob angeordnet. Während Sie können verschachtelte Ordner simulieren, müssten Sie einige Arbeit tun, um einzelne Dateien zuzuordnen. Um einzelne Blobs herunterzuladen, müssen Sie den Container abrufen und ListBlobs() aufrufen, um einzelne Blobs zu benennen.

Wie

Die Eclipse-Projekt entpacken eines vbs-Skript, das zu verwenden ist trivial. Von einem Visual Studio-Projekt (oder wirklich jedem Skript) würde ich in Erwägung ziehen, etwas wie 7zip herunterzuladen, was kostenlos und trivial zu installieren ist. Laden Sie dann einfach die Zip-Datei vom Blob-Speicher in den lokalen Speicher (im richtigen Ordner) herunter und übergeben Sie sie an 7zip.

Ich hoffe, dies gibt Ihnen genug Anleitung, um die richtige Entscheidung zu treffen. Wenn es mich wäre und ich einen Build (wie Tomcat) speichern würde, würde ich die gesamte Verzeichnisstruktur in einem Reißverschluss halten. Das gibt mir die Gewissheit, dass ich nichts kaputt gemacht habe, indem ich nur eine einzige Datei geändert habe. Und ... ich kann eine laufende Geschichte von Tomcat-Versionen einfach mit mehreren Reißverschlüssen (in separaten Blobs) behalten.

+0

Sehr cool. Ich denke, ich werde versuchen, alles aufzuräumen. Das bedeutet, dass ich drei Dateien im Container benötige: das Build-Archiv, die ausführbare Datei 7zip und ein Batch-Skript, das der Arbeitskraft die Installation von 7zip anweist, den Build entpackt und dann die Bereitstellung ausführt. Klingt das richtig? Prost :) – RobVious

+0

Hört sich gut an. 7zip muss nicht unbedingt im selben Container sein. Haben Sie so viele Behälter wie Sie möchten. Das Stapelscript sollte Teil Ihrer Windows Azure-Bereitstellung sein. Seit 7zip bietet ein MSI, das von einem Startskript ausgeführt werden kann. Sie müssen 7zip auf den lokalen Speicher herunterladen, um es zu installieren. Einfach mit einem öffentlichen Blob zu machen oder direkt von Sourceforge herunterzuladen. Wenn Sie sich in einem privaten Blob befinden, müssen Sie Zugriff auf die Schlüssel erhalten oder die Zugriffssignatur für den Blob oder den Container freigeben. Für jetzt würde ich einfach anfangen und mit öffentlichem blob gehen, um 7zip msi zu speichern. –

1

Mit der Freigabe von AZCOPY Tool können Sie dies in einer Zeile tun. Details here.

Cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy" 

.\AzCopy /Source:C:\Users\folderName\ ` 
/Dest:https://storageAccountName.blob.core.windows.net/storageContainerName ` 
/DestKey:yourStorageAccountKey /S