Ć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.
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 identyfikatora Entra firmy Microsoft z tożsamościami zarządzanymi w celu autoryzowania żądań względem danych obiektów blob, kolejek i tabel, jeśli 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
BlobServiceClient
obiektu i podaj parametry połączenia na koncie magazynu.Aby uzyskać obiekt , wywołaj metodę
BlobContainerClient
GetBlobContainerClient
przyBlobServiceClient
uż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:
BlobServiceClient
Utwórz obiekt, tworząc wystąpienie nowegoBlobServiceClientBuilder
obiektu przy użyciu parametry połączenia na koncie magazynu.Pobierz metodę
BlobContainerClient
, wywołując metodęgetBlobContainerClient
na podstawieBlobServiceClient
nazwy 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 BlobServiceClientBuilder
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.
Tworzenie kontenerów podczas uruchamiania
Aby utworzyć kontener podczas uruchamiania aplikacji lub gdy aplikacja najpierw próbuje użyć kontenera, wywołaj metodę CreateIfNotExistsAsync
BlobContainerClient
.
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
IStorage
o 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 restore
To 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 ConfigureServices
Startup.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
using
instrukcje, 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żywanaBlobStorage
po raz pierwszy. Jeśli jesteś ciekawy, możesz spojrzeć naConfigureServices
Startup.cs, aby zobaczyć, jak wykonać połączenie.Initialize
to miejsce, w którym chcesz utworzyć kontener, jeśli jeszcze nie istnieje. Zastąp bieżącą implementacjęInitialize
nastę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
uploadedFile
właściwości przez strukturę JSF. - download: pobiera pojedynczy plik według jego nazwy.
Aby wykonać swoją pracę, każda metoda używa
Storage
wystąpienia o nazwiestorage
. W pliku src/main/java/com/microsoft/azure/samples/service/BlobStorage.java jest niekompletna implementacjaStorage
pliku 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ą
dependencyManagement
sekcję pod tagiemproject
XML.<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
dependency
doproject/dependencies
sekcji 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
import
instrukcje, 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,
BlobStorage
aby przechowywaćBlobContainerClient
odwoł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.
BlobStorage
dlatego zaleca się przechowywanieBlobContainerClient
odwołania w jego polu z adnotacjami@Singleton
.Znajdź metodę
init
z adnotacją@PostConstruct
. Aplikacja wywołuje tę metodę po utworzeniuBlobStorage
wystąpienia i przed jej pierwszym zastosowaniem.init
to miejsce, w którym należy utworzyć kontener, jeśli jeszcze nie istnieje. Zastąp bieżącą implementację metodyinit
nastę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(); } }