Alıştırma - Blob karşıya yüklemeleri ve indirmeleri
Blob Depolama tek tek bloblarla etkileşim kurmak için bir BlobClient
nesne kullanın. Blobu, blob'un bulunduğu konumdan BlobContainerClient
blob'un adıyla isteyerek alabilirsinizBlobClient
. BlobClient
Blob Depolama tek tek blobları karşıya yükleme, indirme ve yönetme yöntemlerine sahiptir.
BlobClient nesnesi alma
Bir ada göre almak BlobClient
için blobun GetBlobClient
adını kullanarak blobu içeren yöntemleri BlobContainerClient
çağırın. NesneBlobClient
, Blob Depolama blobu karşıya yükleyerek, indirerek veya yöneterek blobla etkileşim kurmanızı sağlar.
Verilerin bloba ve bloblardan taşınması zaman alan bir ağ işlemidir. .NET için Azure Depolama SDK'sı, ağ etkinliği gerektiren tüm yöntemlerin zaman uyumsuz uygulanmasını sağlar. Bu zaman uyumsuz uygulamaları uygulamanızda mümkün olduğunca kullanmanızı öneririz.
Büyük veri nesneleriyle çalışırken bayt dizileri veya dizeler gibi bellek içi yapılar yerine akışları kullanmanızı öneririz. Bu yaklaşım, hedefe göndermeden önce tam içeriğin bellekte arabelleğe alınmasını önler. ASP.NET Core, isteklerden ve yanıtlardan akışların okunup yazılmasını destekler.
Bir ada göre almak BlobClient
için blobun getBlobClient
adını kullanarak blobu içeren yöntemleri BlobContainerClient
çağırın. NesneBlobClient
, Blob Depolama blobu karşıya yükleyerek, indirerek veya yöneterek blobla etkileşim kurmanızı sağlar.
Büyük veri nesneleriyle çalışırken bayt dizileri veya dizeler gibi bellek içi yapılar yerine akışları kullanmanızı öneririz. Bu yaklaşım, hedefe göndermeden önce tam içeriğin bellekte arabelleğe alınmasını önler.
Yeni bloblar oluşturma
Yeni blob oluşturmak için, depolamada var olmayan bir blobun başvurusunda Upload
yöntemlerinden birini çağırın. Bu yaklaşım iki şey yapar: blobu depolamada oluşturur ve verileri karşıya yükler.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
Yeni blob oluşturmak için, depolamada var olmayan bir blobun başvurusunda upload
yöntemlerinden birini çağırın. Bu yaklaşım iki şey yapar: blobu depolama alanında oluşturur ve verileri karşıya yükler.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
Alıştırma
Karşıya yükleme ve indirme kodunu ekleyerek uygulamanızı tamamlayın, ardından test için Azure Uygulaması Hizmeti'ne dağıtın.
Karşıya Yükle
Blobu karşıya yüklemek için yöntemini uygularsınız BlobStorage.Save
. İlk olarak, üzerinde BlobClient
çağrısı GetBlobClient
yaparak blobu temsil eden bir BlobContainerClient
nesne alırsınız. Ardından, bu yönteme geçirilen verilerin Blob Depolama'a kaydedilmesi Stream
için üzerindeki yöntemini BlobClient
kullanınUploadAsync
.
Düzenleyicide
BlobStorage.cs
dosyasındakiSave
öğesini aşağıdaki kodla değiştirin. Çalışmanızı kaydetmek için CTRL+S kullanın.public Task Save(Stream fileStream, string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container (folder) the file will be saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get the Blob Client used to interact with (including create) the blob BlobClient blobClient = containerClient.GetBlobClient(name); // Upload the blob return blobClient.UploadAsync(fileStream); }
Dekont
Burada gösterilen akış tabanlı karşıya yükleme kodu, dosyayı Blob Depolama göndermeden önce bayt dizisine okumaktan daha verimlidir. Ancak, istemciden dosyayı almak için kullandığınız ASP.NET Core
IFormFile
tekniği gerçek bir uçtan uca akış uygulaması değildir. Yalnızca küçük dosyaların karşıya yüklemelerini işlemek için uygundur.
Blobu karşıya yüklemek için yöntemini uygularsınız BlobStorage.save
. İlk olarak, üzerinde BlobClient
çağrısı getBlobClient
yaparak blobu temsil eden bir BlobContainerClient
nesne alırsınız. Ardından, bu yönteme geçirilen verilerin Blob Depolama'a kaydedilmesi InputStream
için üzerindeki yöntemini BlobClient
kullanınupload
.
Düzenleyicide
BlobStorage.java
dosyasındakisave
öğesini aşağıdaki kodla değiştirin.public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
İndir
Bir dosyayı indirmek için nesnedeki OpenReadAsync
BlobClient
yöntemi döndürülür. Bu yöntem bir Stream
döndürür. Bu, kodunuzun Blob Depolama tüm baytları aynı anda yüklemesine gerek olmadığı anlamına gelir. ASP.NET Core'un dosyayı tarayıcıya akışla aktarabilmesi için blob akışına bir başvuru döndürmeniz yeterlidir.
değerini bu kodla değiştirin
Load
ve CTRL + S tuşlarını kullanarak çalışmanızı kaydedin.public Task<Stream> Load(string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container the blobs are saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get a client to operate on the blob so we can read it. BlobClient blobClient = containerClient.GetBlobClient(name); return blobClient.OpenReadAsync(); }
Bir dosyayı indirmek için üzerindeki BlobClient
yöntemini kullanınopenInputStream
. Bu yöntem bir InputStream
döndürür. Bu, kodunuzun Blob Depolama tüm baytları aynı anda yüklemesine gerek olmadığı anlamına gelir. Yalnızca blob akışına bir başvuru döndürmeniz yeterlidir. Bu IndexBean
başvuruyu kullanarak içeriği tarayıcıya akışla aktarabilirsiniz.
read
öğesini bu kodla değiştirin ve çalışmanızı kaydedin.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
Azure’da dağıtma ve çalıştırma
Uygulamanız tamamlandı. Dağıtın ve çalıştığını görün.
Bir App Service uygulaması oluşturun ve bunu depolama hesabı bağlantı dizemiz ve kapsayıcı adımız için uygulama ayarlarıyla yapılandırın.
az storage account show-connection-string
ile depolama hesabının bağlantı dizesini alın ve kapsayıcının adınıfiles
olarak ayarlayın.Uygulama adının genel olarak benzersiz olması gerekir. doldurmak
<your-unique-app-name>
için kendi adınızı seçin. yerine<your-unique-storage-account-name>
daha önce oluşturduğunuz depolama hesabı adını kullanın. Azure CLI'da aşağıdaki komutların her birini sırayla çalıştırın:az appservice plan create \ --name blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --sku FREE --location eastus
az webapp create \ --name <your-unique-app-name> \ --plan blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
CONNECTIONSTRING=$(az storage account show-connection-string \ --name <your-unique-storage-account-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --output tsv)
az webapp config appsettings set \ --name <your-unique-app-name> --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --settings AzureStorageConfig:ConnectionString=$CONNECTIONSTRING AzureStorageConfig:FileContainerName=files
Uygulamanızı dağıtın. Aşağıdaki komutlar siteyi pub klasörüne yayımlar, site.zip dosyasına sıkıştırabilir ve zip'i App Service'e dağıtabilir.
Dekont
Aşağıdaki komutları çalıştırmadan önce kabuğunuzun hala mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start dizininde olduğundan emin olun. Dizini bu konuma değiştirmek için
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
seçeneğini kullanabilirsiniz.dotnet publish -o pub cd pub zip -r ../site.zip *
az webapp deployment source config-zip \ --src ../site.zip \ --name <your-unique-app-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
Çalışan uygulamayı görmek için tarayıcıda
https://<your-unique-app-name>.azurewebsites.net
bağlantısını açın. Aşağıdaki gibi görünmelidir:Uygulamayı test etmek için birkaç dosyayı karşıya yüklemeyi ve indirmeyi deneyin. Birkaç dosyayı karşıya yükledikten sonra kapsayıcıdaki blobları görmek için kabukta aşağıdaki kodu çalıştırın. değerini modülde daha önce oluşturduğunuz depolama hesabı adıyla değiştirin
<your-unique-storage-account-name>
:az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
Uygulamanız tamamlandı. Dağıtın ve çalıştığını görün. App Service uygulaması oluşturmak, yapılandırmak ve dağıtmak için Azure Uygulaması Hizmeti için Maven Eklentisi'ni kullanın.
Düzenleyicide pom.xml dosyasını açın ve xml etiketinin
build
altına aşağıdakileriplugins
ekleyin.<plugins> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>2.3.0</version> <configuration> <schemaVersion>v2</schemaVersion> <subscriptionId>${env.AZ_SUBSCRIPTION_ID}</subscriptionId> <resourceGroup>${env.AZ_RESOURCE_GROUP}</resourceGroup> <appName>${env.AZ_APP_NAME}</appName> <pricingTier>${env.AZ_PRICING_TIER}</pricingTier> <region>${env.AZ_REGION}</region> <runtime> <os>Linux</os> <javaVersion>Java 11</javaVersion> <webContainer>Tomcat 9.0</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.war</include> </includes> </resource> </resources> </deployment> <appSettings> <property> <name>STORAGE_CONNECTION_STRING</name> <value>${env.AZ_STORAGE_CONNECTION_STRING}</value> </property> <property> <name>STORAGE_CONTAINER_NAME</name> <value>${env.AZ_STORAGE_CONTAINER_NAME}</value> </property> </appSettings> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins>
Aşağıdaki komutlar, Azure Uygulaması Hizmeti için Maven Eklentisi için ortam değişkenlerini hazırlar. ile
az storage account show-connection-string
depolama hesabının bağlantı dizesi, ileaz account show
abonelik kimliğini ayıklayın ve bölge, fiyatlandırma, kapsayıcı adı ve uygulama adını ayarlayın. Uygulama adının genel olarak benzersiz olması gerekir. doldurmak<your-unique-app-name>
için kendi adınızı seçin.export AZ_SUBSCRIPTION_ID=$(az account show --query id --output tsv) export AZ_RESOURCE_GROUP="<rgn>[sandbox resource group name]</rgn>" export AZ_REGION=eastus export AZ_APP_NAME=<your-unique-app-name> export AZ_PRICING_TIER=F1 export AZ_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name <your-unique-storage-account-name> --output tsv) export AZ_STORAGE_CONTAINER_NAME=files
Bahşiş
Gerçek dünya Java uygulamalarını dağıtmak için önerilen en düşük katman herhangi bir Premium V2 Hizmet Planıdır.
Uygulamanızı dağıtın. Aşağıdaki komut uygulamayı ROOT.war içine oluşturur ve WAR dosyasını App Service'e dağıtır. Azure Uygulaması Hizmeti için Maven Eklentisi, ilk dağıtım girişiminde kaynakları sağlar.
Dekont
Aşağıdaki komutları çalıştırmadan önce kabuğunuzun hala mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start dizininde olduğundan emin olun. Dizini bu konuma değiştirmek için
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
seçeneğini kullanabilirsiniz.mvn clean package azure-webapp:deploy
Çalışan uygulamayı görmek için tarayıcıda
https://<your-unique-app-name>.azurewebsites.net
bağlantısını açın. Aşağıdaki gibi görünmelidir:Bahşiş
Bu modülde, uygulamayı Azure Uygulaması Service'te Tomcat 9'da dağıtmak üzere Azure Uygulaması Hizmeti için Maven Eklentisi kullanılır. Diğer seçenekler hakkında bilgi edinmek için bu modülün sonundaki Daha Fazla Okuma bölümüne bakın.
Uygulamayı test etmek için birkaç dosyayı karşıya yüklemeyi ve indirmeyi deneyin. Birkaç dosyayı karşıya yükledikten sonra kapsayıcıdaki blobları görmek için kabukta aşağıdaki kodu çalıştırın.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table