Alıştırma - İstemci kitaplığını yapılandırma ve başlatma
Azure Blob depolama kullanan uygulamalar için tipik iş akışı aşağıdaki gibidir:
Yapılandırmayı alma: Başlangıçta depolama hesabı yapılandırmasını ( genellikle bir depolama hesabı bağlantı dizesi) yükleyin.
İstemciyi başlatma: Azure Depolama istemci kitaplığını başlatmak için bağlantı dizesi kullanın. Bu başlatma, uygulamanın Blob depolama API'siyle çalışmak için kullandığı nesneleri oluşturur.
Kullanma: Kapsayıcılar ve bloblar üzerinde çalışmak için istemci kitaplığını kullanarak API çağrıları yapın.
Bağlantı dizenizi yapılandırma
Uygulamanızı çalıştırmadan önce kullandığınız depolama hesabının bağlantı dizesi alın. Azure portalı, Azure CLI ve Azure PowerShell dahil olmak üzere herhangi bir Azure yönetim arabirimini kullanabilirsiniz. Web uygulamasını kodunuzu bu modülün sonuna yakın bir noktada çalıştıracak şekilde ayarlarken, daha önce oluşturduğunuz depolama hesabının bağlantı dizesi almak için Azure CLI'yı kullanın.
Depolama hesabı bağlantı dizeleri hesap anahtarını içerir. Hesap anahtarını gizli dizi olarak düşünün ve her zaman güvenli bir şekilde depolayın. Burada, bağlantı dizesi bir App Service uygulama ayarında depolarsınız. App Service uygulama ayarları, uygulama gizli dizileri için güvenli bir yerdir. Bu tasarım yerel geliştirmeyi desteklemez ve tek başına sağlam, uçtan uca bir çözüm değildir.
Önemli
Bu kod örneği, depolama hesabınıza erişimi yetkilendirmek için bir bağlantı dizesi kullanır. Bu yapılandırma, örneğin amaçlar içindir. Uygulama kodunda bağlantı dizeleri ve hesap erişim anahtarları dikkatli kullanılmalıdır. Hesap erişim anahtarınız kaybolursa veya yanlışlıkla güvenli olmayan bir konuma yerleştirilirse, hizmetiniz güvenlik açığına maruz kalabilir. Erişim anahtarına sahip olan herkes, depolama hesabına yönelik istekleri yetkilendirebiliyor ve tüm verilere etkin bir şekilde erişim sahibi oluyor.
En iyi güvenlik için Microsoft, mümkün olduğunca blob, kuyruk ve tablo verilerine karşı istekleri yetkilendirmek için yönetilen kimliklerle Microsoft Entra Id kullanılmasını önerir. Daha fazla bilgi edinmek için bkz . Microsoft Entra Id kullanarak bloblara erişimi yetkilendirme.
Blob depolama nesne modelini başlatma
.NET için Azure Depolama SDK'sında Blob depolamayı kullanmaya yönelik standart desen aşağıdaki gibidir:
Yeni
BlobServiceClient
bir nesne örneği oluşturun ve depolama hesabınıza bağlantı dizesi sağlayın.almak
BlobContainerClient
için, üzerinde etkileşim kurmak veya oluşturmak istediğiniz kapsayıcının adıyla çağrısındaGetBlobContainerClient
BlobServiceClient
bulunur.
Kodda bu adımlar şöyle görünür.
BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
Bu başlatma kodlarından hiçbiri ağ üzerinden çağrı yapmaz. Bu durum, yanlış bilgiler nedeniyle oluşan bazı özel durumların daha sonra oluşmadığı anlamına gelir. Örneğin, sınıfın oluşturucusunun BlobServiceClient
yanlış biçimlendirilmiş bir bağlantı dizesi sağlanırsa, hemen bir özel durum oluşturulur. Ancak, bağlantı dizesi mevcut olmayan bir depolama hesabına işaret ederse, depolama hesabına karşı bir işlem denemeden hiçbir özel durum oluşturulur.
Java için Azure Depolama SDK'sında Blob Depolama'yı kullanmaya yönelik standart desen aşağıdaki adımlardan oluşur:
BlobServiceClient
Depolama hesabınızdaki bağlantı dizesi kullanarak yeniBlobServiceClientBuilder
bir nesne örneği oluşturarak bir oluşturun.BlobContainerClient
ile etkileşim kurmak veya oluşturmak istediğiniz kapsayıcının adıyla yöntemini çağırarakgetBlobContainerClient
BlobServiceClient
bir alın.
Kodda bu adımlar şöyle görünür.
BlobServiceClient blobServiceClient = BlobServiceClientBuilder()
.connectionString(connectionString)
.buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
Bu başlatma kodlarından hiçbiri ağ üzerinden çağrı yapmaz. Bu durum, yanlış bilgiler nedeniyle oluşan bazı özel durumların daha sonra oluşmadığı anlamına gelir. Örneğin, içine yanlış biçimlendirilmiş bir bağlantı dizesi sağlanırsaBlobServiceClientBuilder
, hemen bir özel durum oluşturulur. Ancak, bağlantı dizesi mevcut olmayan bir depolama hesabına işaret ederse, depolama hesabına karşı bir işlem denemeden hiçbir özel durum oluşturulur.
Başlangıçta kapsayıcıları oluşturma
Uygulamanız başlatıldığında veya uygulama kapsayıcıyı ilk kez kullanmayı denediğinde kapsayıcı oluşturmak için üzerinde çağrısında CreateIfNotExistsAsync
bulunur BlobContainerClient
.
CreateIfNotExistsAsync
kapsayıcı zaten varsa özel durum oluşturmaz, ancak Azure Blob Depolama için bir ağ çağrısı yapar. Kapsayıcıyı her kullanmayı denediğinizde değil, başlatma sırasında bir kez çağırın.
Uygulamanız başlatıldığında veya uygulamayı ilk kez kullanmaya çalıştığında kapsayıcı oluşturmak için, exists
kapsayıcının BlobContainerClient
zaten var olup olmadığını denetlemek için çağrısında bulunabilirsiniz. Yoksa çağrısı yapın create
. Kapsayıcıyı her kullanmayı denediğinizde değil, başlatma sırasında bir kez çağırın.
Alıştırma
Bitmemiş uygulamayı kopyalama ve inceleme
İlk olarak GitHub'dan başlangıç uygulamasını kopyalayın. Kaynak kodun bir kopyasını almak ve düzenleyicide açmak için Azure Shell CLI'de aşağıdaki komutları çalıştırın:
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 .
Düzenleyicide Controllers/FilesController.cs dosyasını açın. Burada yapılacak bir iş yok, ancak uygulamanın ne yaptığına hızlıca göz atın.
Bu denetleyici üç eylemli bir API uygular:
- Dizin: (
GET /api/Files
) karşıya yüklenen her dosya için bir URL listesi döndürür. Uygulama ön ucu, karşıya yüklenen dosyalara ulaştıran köprülerin listesini oluşturmak için bu yöntemi çağırır. - Karşıya yükleme: (
POST /api/Files
) karşıya yüklenen bir dosyayı alır ve kaydeder. - İndir: (
GET /api/Files/{filename}
) tek bir dosyayı adına göre indirir.
Her yöntem işini yapmak için
storage
adlı birIStorage
örneği kullanır. Doldurulması gereken Models/BlobStorage.cs içinde tamamlanmamış bir uygulamasıIStorage
vardır.- Dizin: (
NuGet paketini ekleyin
Azure Depolama SDK'sına bir başvuru ekleyin. Azure Shell CLI'de aşağıdaki komutları çalıştırın:
dotnet add package Azure.Storage.Blobs dotnet restore
Bu komut, Blob Depolama istemci kitaplığının en yeni sürümünü kullanmanızı sağlar.
Yapılandırma
İhtiyacınız olan yapılandırma değerleri depolama hesabı bağlantı dizesi ve uygulamanın dosyaları depolamak için kullandığı kapsayıcının adıdır. Bu modülde, uygulamayı yalnızca Azure Uygulaması Hizmeti'nde çalıştıracaksınız. App Service en iyi uygulamasını izleyin ve değerleri App Service uygulama ayarlarında depolayın. App Service örneğini oluştururken bunu yaparsınız. Şu anda yapman gereken bir şey yok.
Yapılandırmayı kullanmak söz konusu olduğunda, başlangıç uygulaması ihtiyacınız olan tesisatı içerir. içindeki BlobStorage
oluşturucu parametresinin IOptions<AzureStorageConfig>
iki özelliği vardır: depolama hesabı bağlantı dizesi ve uygulamanızın blobları depolamak için kullandığı kapsayıcının adı. yönteminde ConfigureServices
Startup.cs
, uygulama başlatıldığında yapılandırmadaki değerleri yükleyen bir kod vardır.
Başlatma
Düzenleyicide Modeller/BlobStorage.cs'yi açın. Dosyanın en üstüne, ekleyeceğiniz koda hazırlamak için aşağıdaki
using
deyimleri ekleyin.using Azure; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models;
Initialize
yöntemini bulun. Uygulamanız ilk kez kullandığındaBlobStorage
bu yöntemi çağırır. Merak ediyorsanız aramanın nasıl yapıldığını görmek için Startup.cs bakabilirsinizConfigureServices
.Henüz kapsayıcımız yoksa,
Initialize
kapsayıcıyı oluşturmak istediğiniz yerdir. geçerli uygulamasınıInitialize
aşağıdaki kodla değiştirin ve CTRL+S kullanarak çalışmanızı kaydedin.public Task Initialize() { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); return containerClient.CreateIfNotExistsAsync(); }
Bitmemiş uygulamayı kopyalama ve inceleme
İlk olarak GitHub'dan başlangıç uygulamasını kopyalayın. Kaynak kodun bir kopyasını almak ve düzenleyicide açmak için Azure Shell CLI'de aşağıdaki komutları çalıştırın:
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 .
Düzenleyicide src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java dosyasını açın. Burada yapılacak bir iş yok, ancak uygulamanın ne yaptığına hızlıca göz atın.
Bu istek kapsamlı fasulye, src/main/webapp/index.xhtml Java Sunucusu Yüzleri (JSF) sayfası tarafından kullanılan üç eylem uygular:
- listFileNames: Karşıya yüklenen her dosya için bir dosya adı listesi döndürür. index.xhtml sayfası, karşıya yüklenen dosyalara köprü listesi oluşturmak için bu yöntemi çağırır.
- karşıya yükleme: Karşıya yüklenen bir dosyayı alır ve kaydeder. Dosya içeriği ve meta veriler JSF çerçevesi tarafından özelliğine eklenir
uploadedFile
. - download: Tek bir dosyayı adına göre indirir.
Her yöntem, işini yapmak için adlı
storage
birStorage
örnek kullanır. doldurulması gereken src/main/java/com/microsoft/azure/samples/service/BlobStorage.java içinde tamamlanmamış bir uygulamasıStorage
vardır.
Java için Azure Depolama SDK'sı başvurusu ekleme
Projeye Azure istemci kitaplıkları eklemek için Azure BOM'u kullanmanızı öneririz. Çok az bağımlılık çakışması sağlarken birden çok Azure istemci kitaplığını kullanarak düzenlemenin basit ve zarif bir yolunu sağlar.
Düzenleyicide pom.xml dosyasını açın.
Azure BOM'u projeye eklemek için xml etiketinin
project
altına aşağıdakidependencyManagement
bölümü ekleyin.<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>
Java için Azure Depolama SDK'sını eklemek için xml bölümüne aşağıdakileri
dependency
project/dependencies
ekleyin.<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> </dependency>
Yapılandırma
İhtiyacınız olan yapılandırma değerleri, bağlantı dizesi depolama hesabı ve uygulamanın dosyaları depolamak için kullandığı kapsayıcının adıdır. Bu modülde, uygulamayı yalnızca Azure Uygulaması Hizmeti'nde çalıştıracaksınız. App Service en iyi uygulamasını izleyin ve değerleri App Service uygulama ayarlarında depolayın. App Service örneğini oluştururken bunu yaparsınız. Şu anda yapman gereken bir şey yok.
Yapılandırmayı kullanmak söz konusu olduğunda App Service uygulama ayarları, uygulama koduna ortam değişkenleri olarak geçirilir. Bunları başlatma kodunda okursunuz.
Başlatma
Düzenleyicide src/main/java/com/microsoft/azure/samples/service/BlobStorage.java açın. Dosyanın en üstüne, ekleyeceğiniz koda hazırlamak için aşağıdaki
import
deyimleri ekleyin.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;
Başvuruyu tutmak
BlobContainerClient
için sınıfınaBlobStorage
bir sınıf özelliği ekleyin.private BlobContainerClient blobContainerClient;
İpucu
Azure istemcileri durum bilgisi olmayan ve iş parçacığı açısından güvenlidir. Uygun olduğunda örneklerini önbelleğe almaları önerilir. Örneğin, üzerinde çalıştığınız uygulama sabit bir ada sahip tek bir kapsayıcı kullanır, bu nedenle bunu uygulama ömrü kapsamında önbelleğe almak en iyisidir.
BlobStorage
@Singleton
bu nedenle, başvurununBlobContainerClient
alanında depolanması önerilir.ek açıklamalı
init
@PostConstruct
yöntemini bulun. Uygulamanız, örnek oluşturulduktan sonraBlobStorage
ve ilk kez kullanılmadan önce bu yöntemi çağırır.init
kapsayıcınız yoksa, kapsayıcınızın oluşturulacağı yerdir. Geçerliinit
uygulamasını aşağıdaki kodla değiştirin ve çalışmanızı kaydedin.@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(); } }