Ćwiczenie — konfigurowanie i inicjowanie biblioteki klienta
Typowy przepływ pracy dla aplikacji korzystających z usługi Azure Blob Storage jest następujący:
Pobieranie konfiguracji: podczas uruchamiania załaduj konfigurację konta magazynu, zazwyczaj konto magazynu parametry połączenia.
Inicjowanie klienta: aby zainicjować bibliotekę klienta usługi Azure Storage, użyj parametry połączenia. Ta inicjacja tworzy obiekty używane przez aplikację do pracy z interfejsem API usługi Blob Storage.
Użyj: aby wykonywać operacje na kontenerach i obiektach blob, wykonaj wywołania interfejsu API przy użyciu biblioteki klienta.
Uwaga / Notatka
To ćwiczenie jest opcjonalne. Jeśli chcesz wykonać to ćwiczenie, przed rozpoczęciem musisz utworzyć subskrypcję platformy Azure. Jeśli nie masz konta platformy Azure lub nie chcesz go tworzyć w tej chwili, możesz zapoznać się z instrukcjami, aby zrozumieć prezentowane informacje.
Uwaga / Notatka
W tej lekcji użyjesz usługi Azure Cloud Shell jako terminalu. Dostęp do usługi Cloud Shell można uzyskać za pośrednictwem witryny Azure Portal lub logowania usługi Cloud Shell. Nie musisz nic instalować na swoim komputerze czy laptopie, aby z niej korzystać.
Konfigurowanie parametrów połączenia
Przed uruchomieniem aplikacji pobierz parametry połączenia dla używanego konta magazynu. Możesz użyć dowolnego interfejsu zarządzania platformy Azure, aby go uzyskać, w tym witryny Azure Portal, interfejsu wiersza polecenia platformy Azure i programu Azure PowerShell. Po skonfigurowaniu aplikacji internetowej w celu uruchomienia kodu na końcu tego modułu użyj interfejsu wiersza polecenia platformy Azure, aby uzyskać parametry połączenia dla utworzonego wcześniej konta magazynu.
Parametry połączenia konta magazynu zawierają klucz konta. Rozważ klucz konta wpis tajny i zawsze przechowuj go bezpiecznie. W tym miejscu zapiszesz parametry połączenia w ustawieniu aplikacji usługi App Service. Ustawienia aplikacji usługi App Service to bezpieczne miejsce dla wpisów tajnych aplikacji. Ten projekt nie obsługuje programowania lokalnego i nie jest niezawodnym, kompleksowym rozwiązaniem.
Ważne
W tym przykładzie kodu użyto parametry połączenia do autoryzowania dostępu do konta magazynu. Ta konfiguracja jest przykładowa. Parametry połączenia i klucze dostępu do konta powinny być używane ostrożnie w kodzie aplikacji. Jeśli klucz dostępu do twojego konta zostanie utracony lub przypadkowo umieszczony w niezabezpieczonej lokalizacji, usługa może stać się podatna na zagrożenia. Każdy, kto ma klucz dostępu, może autoryzować żądania względem konta magazynu i efektywnie ma dostęp do wszystkich danych.
Aby uzyskać optymalne zabezpieczenia, firma Microsoft zaleca używanie tożsamości zarządzanych dla zasobów platformy Azure w celu autoryzowania żądań dotyczących danych obiektów blob, kolejek i tabel, gdy jest to możliwe. Aby dowiedzieć się więcej, zobacz Autoryzowanie dostępu do obiektów blob przy użyciu identyfikatora Entra firmy Microsoft.
Inicjowanie modelu obiektu usługi Blob Storage
W zestawie SDK usługi Azure Storage dla platformy .NET standardowy wzorzec korzystania z usługi Blob Storage jest następujący:
Utwórz wystąpienie nowego
BlobServiceClientobiektu i podaj parametry połączenia na koncie magazynu.Aby uzyskać obiekt , wywołaj metodę
BlobContainerClientGetBlobContainerClientprzyBlobServiceClientużyciu nazwy kontenera, z którym chcesz wchodzić w interakcję lub utworzyć.
W kodzie te kroki wyglądają następująco.
BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
Żaden fragment tego kodu inicjowania nie wykonuje wywołań za pośrednictwem sieci. Oznacza to, że niektóre wyjątki występujące z powodu nieprawidłowych informacji nie są zgłaszane dopiero później. Jeśli na przykład do konstruktora BlobServiceClient klasy zostanie dostarczony niepoprawnie sformatowany parametry połączenia, natychmiast zostanie zgłoszony wyjątek. Jeśli jednak parametry połączenia wskazuje konto magazynu, które nie istnieje, nie zostanie zgłoszony wyjątek, dopóki nie podejmiesz próby wykonania operacji na koncie magazynu.
W zestawie SDK usługi Azure Storage dla języka Java standardowy wzorzec korzystania z usługi Blob Storage składa się z następujących kroków:
BlobServiceClientUtwórz obiekt, tworząc wystąpienie nowegoBlobServiceClientBuilderobiektu przy użyciu parametry połączenia na koncie magazynu.Pobierz metodę
BlobContainerClient, wywołując metodęgetBlobContainerClientna podstawieBlobServiceClientnazwy kontenera, z którym chcesz korzystać lub z którym chcesz utworzyć.
W kodzie te kroki wyglądają następująco.
BlobServiceClient blobServiceClient = BlobServiceClientBuilder()
.connectionString(connectionString)
.buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
Żaden fragment tego kodu inicjowania nie wykonuje wywołań za pośrednictwem sieci. Oznacza to, że niektóre wyjątki występujące z powodu nieprawidłowych informacji nie są zgłaszane dopiero później. Jeśli na przykład do elementu BlobServiceClientBuilderzostanie dostarczony niepoprawnie sformatowany parametry połączenia , natychmiast zostanie zgłoszony wyjątek. Jeśli jednak parametry połączenia wskazuje konto magazynu, które nie istnieje, nie zostanie zgłoszony wyjątek, dopóki nie podejmiesz próby wykonania operacji na koncie magazynu.
Tworzenie kontenerów podczas uruchamiania
Aby utworzyć kontener podczas uruchamiania aplikacji lub gdy aplikacja najpierw próbuje użyć kontenera, wywołaj metodę CreateIfNotExistsAsyncBlobContainerClient.
CreateIfNotExistsAsync Nie zgłasza wyjątku, jeśli kontener już istnieje, ale wykonuje wywołanie sieciowe do usługi Azure Blob Storage. Wywołaj ją raz podczas inicjowania, a nie za każdym razem, gdy próbujesz użyć kontenera.
Aby utworzyć kontener podczas uruchamiania aplikacji lub kiedy po raz pierwszy próbuje go użyć, wywołaj exists metodę , BlobContainerClient aby sprawdzić, czy kontener już istnieje. Jeśli nie istnieje, wywołaj metodę create. Wywołaj ją raz podczas inicjowania, a nie za każdym razem, gdy próbujesz użyć kontenera.
Ćwiczenie
Klonowanie i eksplorowanie niedokończonej aplikacji
Najpierw sklonuj aplikację startową z usługi GitHub. Aby uzyskać kopię kodu źródłowego i otworzyć go w edytorze, uruchom następujące polecenia w interfejsie wiersza polecenia usługi Azure Shell:
git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start code .W edytorze otwórz plik Controllers/FilesController.cs. Nie ma tu żadnej pracy, ale możesz szybko przyjrzeć się temu, co robi aplikacja.
Ten kontroler implementuje interfejs API z trzema akcjami:
-
Indeks: (
GET /api/Files) zwraca listę adresów URL, po jednym dla każdego przekazanego pliku. Fronton aplikacji wywołuje tę metodę w celu utworzenia listy hiperlinków do przekazanych plików. -
Przekaż: (
POST /api/Files) odbiera przekazany plik i zapisuje go. -
Pobierz: (
GET /api/Files/{filename}) pobiera pojedynczy plik według jego nazwy.
Aby wykonać swoją pracę, każda metoda używa wystąpienia interfejsu
IStorageo nazwiestorage. W obszarze Modele/BlobStorage.cs jest niekompletna implementacjaIStorage, która ma być wypełniona.-
Indeks: (
Dodawanie pakietu NuGet
Dodaj odwołanie do zestawu AZURE Storage SDK. Uruchom następujące polecenia w interfejsie wiersza polecenia usługi Azure Shell:
dotnet add package Azure.Storage.Blobs dotnet restoreTo polecenie gwarantuje, że używasz najnowszej wersji biblioteki klienta usługi Blob Storage.
Konfiguruj
Potrzebne wartości konfiguracji to konto magazynu parametry połączenia i nazwa kontenera używanego przez aplikację do przechowywania plików. W tym module uruchomisz aplikację tylko w usłudze aplikacja systemu Azure Service. Postępuj zgodnie z najlepszymi rozwiązaniami usługi App Service i zapisz wartości w ustawieniach aplikacji usługi App Service. Robisz to podczas tworzenia wystąpienia usługi App Service. Nie ma nic, co musisz zrobić w tej chwili.
Jeśli chodzi o korzystanie z konfiguracji, aplikacja startowa zawiera potrzebne elementy kanalizacyjne. Parametr konstruktora IOptions<AzureStorageConfig> w pliku BlobStorage ma dwie właściwości: konto magazynu parametry połączenia i nazwę kontenera używanego przez aplikację do przechowywania obiektów blob. Istnieje kod w metodzie ConfigureServicesStartup.cs , który ładuje wartości z konfiguracji po uruchomieniu aplikacji.
Inicjowanie
W edytorze otwórz pozycję Modele/BlobStorage.cs. W górnej części pliku dodaj następujące
usinginstrukcje, aby przygotować go do kodu, który chcesz dodać.using Azure; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models;Znajdź metodę
Initialize. Aplikacja wywołuje tę metodę, gdy jest używanaBlobStoragepo raz pierwszy. Jeśli jesteś ciekawy, możesz spojrzeć naConfigureServicesStartup.cs, aby zobaczyć, jak wykonać połączenie.Initializeto miejsce, w którym chcesz utworzyć kontener, jeśli jeszcze nie istnieje. Zastąp bieżącą implementacjęInitializenastępującym kodem i zapisz swoją pracę przy użyciu CTRL+S.public Task Initialize() { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); return containerClient.CreateIfNotExistsAsync(); }
Klonowanie i eksplorowanie niedokończonej aplikacji
Najpierw sklonuj aplikację startową z usługi GitHub. Aby uzyskać kopię kodu źródłowego i otworzyć go w edytorze, uruchom następujące polecenia w interfejsie wiersza polecenia usługi Azure Shell:
git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start code .W edytorze otwórz plik src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java. Nie ma tu żadnej pracy, ale możesz szybko przyjrzeć się temu, co robi aplikacja.
To żądanie o określonym zakresie fasola implementuje trzy akcje, które są używane przez src/main/webapp/index.xhtml stronie Java Server Faces (JSF):
- listFileNames: zwraca listę nazw plików, po jednym dla każdego przekazanego pliku. Strona index.xhtml wywołuje tę metodę, aby utworzyć listę hiperlinków do przekazanych plików.
-
upload: odbiera przekazany plik i zapisuje go. Zawartość pliku i metadane są wstrzykiwane do
uploadedFilewłaściwości przez strukturę JSF. - download: pobiera pojedynczy plik według jego nazwy.
Aby wykonać swoją pracę, każda metoda używa
Storagewystąpienia o nazwiestorage. W pliku src/main/java/com/microsoft/azure/samples/service/BlobStorage.java jest niekompletna implementacjaStoragepliku src/main/java/com/microsoft/azure/samples/service/BlobStorage.java .
Dodawanie zestawu SDK usługi Azure Storage dla języka Java
Zalecamy dodanie bibliotek klienckich platformy Azure do projektu przy użyciu rozwiązania Azure BOM. Zapewnia prosty i elegancki sposób organizowania przy użyciu wielu bibliotek klienckich platformy Azure przy jednoczesnym zapewnieniu minimalnych konfliktów zależności.
W edytorze otwórz plik pom.xml.
Aby dodać usługę Azure BOM do projektu, dodaj następującą
dependencyManagementsekcję pod tagiemprojectXML.<dependencyManagement> <dependencies> <dependency> <groupId>com.azure</groupId> <artifactId>azure-sdk-bom</artifactId> <version>1.0.6</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Aby dodać zestaw SDK usługi Azure Storage dla języka Java, dodaj następujący kod
dependencydoproject/dependenciessekcji xml.<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> </dependency>
Konfiguruj
Potrzebne wartości konfiguracji to konto magazynu parametry połączenia i nazwa kontenera używanego przez aplikację do przechowywania plików. W tym module uruchomisz aplikację tylko w usłudze aplikacja systemu Azure Service. Postępuj zgodnie z najlepszymi rozwiązaniami usługi App Service i zapisz wartości w ustawieniach aplikacji usługi App Service. Robisz to podczas tworzenia wystąpienia usługi App Service. Nie ma nic, co musisz zrobić w tej chwili.
Jeśli chodzi o korzystanie z konfiguracji, ustawienia aplikacji usługi App Service są przekazywane jako zmienne środowiskowe do kodu aplikacji. Odczytujesz je w kodzie inicjowania.
Inicjowanie
W edytorze otwórz plik src/main/java/com/microsoft/azure/samples/service/BlobStorage.java. W górnej części pliku dodaj następujące
importinstrukcje, aby przygotować go do kodu, który chcesz dodać.import java.util.stream.Collectors; import com.azure.storage.blob.BlobClient; import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.blob.models.BlobItem;Dodaj właściwość klasy w klasie,
BlobStorageaby przechowywaćBlobContainerClientodwołanie.private BlobContainerClient blobContainerClient;Napiwek
Klienci platformy Azure są bezstanowi i bezpieczni wątkowo. Zaleca się buforowanie ich wystąpień, jeśli ma to zastosowanie. Na przykład aplikacja, nad którą pracujesz, używa pojedynczego kontenera o stałej nazwie, dlatego najlepiej buforować ją w zakresie okresu istnienia aplikacji.
BlobStoragedlatego zaleca się przechowywanie@Singletonodwołania w jego polu z adnotacjamiBlobContainerClient.Znajdź metodę
initz adnotacją@PostConstruct. Aplikacja wywołuje tę metodę po utworzeniuBlobStoragewystąpienia i przed jej pierwszym zastosowaniem.initto miejsce, w którym należy utworzyć kontener, jeśli jeszcze nie istnieje. Zastąp bieżącą implementację metodyinitnastępującym kodem, a następnie zapisz swoją pracę.@PostConstruct private void init() { String connectionString = System.getenv("STORAGE_CONNECTION_STRING"); String containerName = System.getenv("STORAGE_CONTAINER_NAME"); BlobServiceClient blobServiceClient = new BlobServiceClientBuilder() .connectionString(connectionString) .buildClient(); blobContainerClient = blobServiceClient.getBlobContainerClient(containerName); if (!blobContainerClient.exists()) { blobContainerClient.create(); } }