From 322f1f27c9a9043a933595088beeb4372c43a5ed Mon Sep 17 00:00:00 2001 From: Luyunmt <2534523917@qq.com> Date: Mon, 18 May 2020 15:30:19 +0800 Subject: [PATCH] change storage blob track1 to track2 --- .../IntelligentMission.Web.csproj | 4 +- .../Services/IStorageClient.cs | 6 +- .../Services/ServiceFactory.cs | 19 +++---- .../Services/SpeakerIdApiClient.cs | 19 ++++--- .../Services/StorageClient.cs | 56 ++++++++++--------- .../Services/VisionApiClient.cs | 1 - IntelligentMission.Web/Startup.cs | 7 +-- 7 files changed, 55 insertions(+), 57 deletions(-) diff --git a/IntelligentMission.Web/IntelligentMission.Web.csproj b/IntelligentMission.Web/IntelligentMission.Web.csproj index bdac82a..e47f4de 100644 --- a/IntelligentMission.Web/IntelligentMission.Web.csproj +++ b/IntelligentMission.Web/IntelligentMission.Web.csproj @@ -1,7 +1,7 @@  - net462 + net472 win7-x86 @@ -12,6 +12,7 @@ + @@ -26,7 +27,6 @@ - diff --git a/IntelligentMission.Web/Services/IStorageClient.cs b/IntelligentMission.Web/Services/IStorageClient.cs index 0abf257..ae1e2c8 100644 --- a/IntelligentMission.Web/Services/IStorageClient.cs +++ b/IntelligentMission.Web/Services/IStorageClient.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; +using Azure.Storage.Blobs; using Microsoft.AspNetCore.Http; -using Microsoft.WindowsAzure.Storage.Blob; namespace IntelligentMission.Web.Services { @@ -12,7 +12,7 @@ public interface IStorageClient Task DeletePersonFaceBlob(string fullBlobUri); Task DeleteCatalogFileBlob(string fullBlobUri); Task DeleteBlobs(string personGroupId, string personId); - CloudBlockBlob GetCatalogFileBlobByUri(string blobUri); - CloudBlockBlob GetAudioEnrollmentBlobByUri(string blobUri); + BlobClient GetCatalogFileBlobByUri(string blobUri); + BlobClient GetAudioEnrollmentBlobByUri(string blobUri); } } \ No newline at end of file diff --git a/IntelligentMission.Web/Services/ServiceFactory.cs b/IntelligentMission.Web/Services/ServiceFactory.cs index 3a1f747..88d76f0 100644 --- a/IntelligentMission.Web/Services/ServiceFactory.cs +++ b/IntelligentMission.Web/Services/ServiceFactory.cs @@ -1,9 +1,8 @@ -using IntelligentMission.Web.Models; +using Azure.Storage; +using Azure.Storage.Blobs; +using IntelligentMission.Web.Models; using Microsoft.Azure.Documents.Client; using Microsoft.ProjectOxford.Face; -using Microsoft.WindowsAzure.Storage; -using Microsoft.WindowsAzure.Storage.Auth; -using Microsoft.WindowsAzure.Storage.Blob; using System; using System.Collections.Generic; using System.Linq; @@ -21,15 +20,11 @@ public ServiceFactory(IMConfig config) this.config = config; } - public CloudStorageAccount CreateCloudStorageAccount2() => - new CloudStorageAccount( - new StorageCredentials( - accountName: this.config.StorageConfig.AccountName, - keyValue: this.config.StorageConfig.AccountKey), - endpointSuffix: this.config.StorageConfig.EndpointSuffix, - useHttps: true); + public BlobServiceClient CreateBlobServiceClient2() => + new BlobServiceClient(new Uri(this.config.StorageConfig.EndpointSuffix), + new StorageSharedKeyCredential( this.config.StorageConfig.AccountName,this.config.StorageConfig.AccountKey)); - public CloudBlobClient CreateCloudBlobClient() => this.CreateCloudStorageAccount2().CreateCloudBlobClient(); + public BlobServiceClient CreateBlobServiceClient() => this.CreateBlobServiceClient2(); //public FaceServiceClient CreateFaceServiceClient2() => new FaceServiceClient(this.config.Keys.FaceApiKey); public FaceServiceClient CreateFaceServiceClient2() => new FaceServiceClient(this.config.Keys.FaceApiKey, this.config.CSEndpoints.FaceApi); diff --git a/IntelligentMission.Web/Services/SpeakerIdApiClient.cs b/IntelligentMission.Web/Services/SpeakerIdApiClient.cs index 6025cf0..e822e2a 100644 --- a/IntelligentMission.Web/Services/SpeakerIdApiClient.cs +++ b/IntelligentMission.Web/Services/SpeakerIdApiClient.cs @@ -1,5 +1,6 @@ -using IntelligentMission.Web.Models; -using Microsoft.WindowsAzure.Storage.Blob; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using IntelligentMission.Web.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; @@ -16,9 +17,9 @@ namespace IntelligentMission.Web.Services { public interface ISpeakerIdApiClient { - Task Identify(CloudBlockBlob blob); + Task Identify(BlobClient blob); Task CreateProfile(); - Task CreateEnrollment(string identificationProfileId, CloudBlockBlob blob); + Task CreateEnrollment(string identificationProfileId, BlobClient blob); } public class SpeakerIdApiClient : ISpeakerIdApiClient @@ -43,12 +44,13 @@ public async Task CreateProfile() } } - public async Task CreateEnrollment(string identificationProfileId, CloudBlockBlob blob) + public async Task CreateEnrollment(string identificationProfileId, BlobClient blob) { using (var httpClient = CreateHttpClient()) using (var stream = new MemoryStream()) { - await blob.DownloadToStreamAsync(stream); + BlobDownloadInfo download = await blob.DownloadAsync(); + await download.Content.CopyToAsync(stream); stream.Position = 0; @@ -66,13 +68,14 @@ public async Task CreateEnrollment(string identificationProfileId, Clou } } - public async Task Identify(CloudBlockBlob blob) + public async Task Identify(BlobClient blob) { // NOTE: API can only support at most 10 speakerIdentificationProfileIds for one identification request so we need to page them var speakerIdentificationProfileIds = await this.GetValidIdentificationProfileIds(); using (var stream = new MemoryStream()) { - await blob.DownloadToStreamAsync(stream); + BlobDownloadInfo download = await blob.DownloadAsync(); + await download.Content.CopyToAsync(stream); var skipToken = 0; const int pageSize = 10; var idSegments = Enumerable.Empty(); diff --git a/IntelligentMission.Web/Services/StorageClient.cs b/IntelligentMission.Web/Services/StorageClient.cs index 815ae2a..000989e 100644 --- a/IntelligentMission.Web/Services/StorageClient.cs +++ b/IntelligentMission.Web/Services/StorageClient.cs @@ -1,7 +1,7 @@ -using IntelligentMission.Web.Models; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using IntelligentMission.Web.Models; using Microsoft.AspNetCore.Http; -using Microsoft.WindowsAzure.Storage; -using Microsoft.WindowsAzure.Storage.Blob; using System; using System.Collections.Generic; using System.Linq; @@ -12,12 +12,12 @@ namespace IntelligentMission.Web.Services { public class StorageClient : IStorageClient { - private CloudBlobClient blobClient; + private BlobServiceClient blobServiceClient; private IMConfig config; - public StorageClient(CloudBlobClient blobClient, IMConfig config) + public StorageClient(BlobServiceClient blobServiceClient, IMConfig config) { - this.blobClient = blobClient; + this.blobServiceClient = blobServiceClient; this.config = config; } @@ -36,48 +36,50 @@ public async Task AddNewAudioEnrollmentBlob(IFormFile blob) private async Task AddBlob(string containerName, string blobName, IFormFile blob) { - var container = blobClient.GetContainerReference(containerName); + var container = blobServiceClient.GetBlobContainerClient(containerName); await container.CreateIfNotExistsAsync(); - await container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); + await container.SetAccessPolicyAsync(PublicAccessType.Blob); - var blockBlob = container.GetBlockBlobReference(blobName); - blockBlob.Properties.ContentType = blob.ContentType; + var blockBlob = container.GetBlobClient(blobName); + BlobHttpHeaders blobHttpHeaders = new BlobHttpHeaders(); + blobHttpHeaders.ContentType = blob.ContentType; using (var stream = blob.OpenReadStream()) { - await blockBlob.UploadFromStreamAsync(stream); + await blockBlob.UploadAsync(stream, blobHttpHeaders); } return blockBlob.Uri.ToString(); } public async Task AddNewBlob(string personGroupId, string personId, IFormFile blob) { - var container = blobClient.GetContainerReference(Containers.PersonFaces); + var container = blobServiceClient.GetBlobContainerClient(Containers.PersonFaces); await container.CreateIfNotExistsAsync(); - await container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); + await container.SetAccessPolicyAsync(PublicAccessType.Blob); var blobName = GetBlobName(personGroupId, personId, $"{Guid.NewGuid()}-{blob.FileName.Replace(' ', '-')}"); - var blockBlob = container.GetBlockBlobReference(blobName); - blockBlob.Properties.ContentType = blob.ContentType; + var blockBlob = container.GetBlobClient(blobName); + BlobHttpHeaders blobHttpHeaders = new BlobHttpHeaders(); + blobHttpHeaders.ContentType = blob.ContentType; using (var stream = blob.OpenReadStream()) { - await blockBlob.UploadFromStreamAsync(stream); + await blockBlob.UploadAsync(stream, blobHttpHeaders); } return blockBlob.Uri.ToString(); } - public CloudBlockBlob GetCatalogFileBlobByUri(string blobUri) => GetBlobByUri(blobUri, Containers.CatalogFiles); + public BlobClient GetCatalogFileBlobByUri(string blobUri) => GetBlobByUri(blobUri, Containers.CatalogFiles); - public CloudBlockBlob GetAudioEnrollmentBlobByUri(string blobUri) => GetBlobByUri(blobUri, Containers.AudioEnrollments); + public BlobClient GetAudioEnrollmentBlobByUri(string blobUri) => GetBlobByUri(blobUri, Containers.AudioEnrollments); - private CloudBlockBlob GetBlobByUri(string blobUri, string containerName) + private BlobClient GetBlobByUri(string blobUri, string containerName) { - var container = blobClient.GetContainerReference(containerName); + var container = blobServiceClient.GetBlobContainerClient(containerName); var blobName = blobUri.Substring(blobUri.LastIndexOf("/") + 1); - var blob = container.GetBlockBlobReference(blobName); + var blob = container.GetBlobClient(blobName); return blob; } @@ -93,21 +95,21 @@ public async Task DeleteCatalogFileBlob(string fullBlobUri) private async Task DeleteBlob(string fullBlobUri, string containerName) { - var container = blobClient.GetContainerReference(containerName); + var container = blobServiceClient.GetBlobContainerClient(containerName); var blobName = ExtractBlobNameFromUri(fullBlobUri, containerName); - var blockBlob = container.GetBlockBlobReference(blobName); + var blockBlob = container.GetBlobClient(blobName); await blockBlob.DeleteAsync(); } public async Task DeleteBlobs(string personGroupId, string personId) { - var container = blobClient.GetContainerReference(Containers.PersonFaces); + var container = blobServiceClient.GetBlobContainerClient(Containers.PersonFaces); var prefix = $"groups/{personGroupId}/persons/{personId}"; - var blobs = container.ListBlobs(prefix: prefix, useFlatBlobListing: true); + var blobs = container.GetBlobs(prefix: prefix); - foreach (CloudBlockBlob blobItem in blobs) + foreach (var blobItem in blobs) { - var blob = container.GetBlockBlobReference(blobItem.Name); + var blob = container.GetBlobClient(blobItem.Name); await blob.DeleteAsync(); } } diff --git a/IntelligentMission.Web/Services/VisionApiClient.cs b/IntelligentMission.Web/Services/VisionApiClient.cs index 1f8f9c4..7980093 100644 --- a/IntelligentMission.Web/Services/VisionApiClient.cs +++ b/IntelligentMission.Web/Services/VisionApiClient.cs @@ -1,5 +1,4 @@ using IntelligentMission.Web.Models; -using Microsoft.WindowsAzure.Storage.Blob; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; diff --git a/IntelligentMission.Web/Startup.cs b/IntelligentMission.Web/Startup.cs index 8533b07..4d7b0e0 100644 --- a/IntelligentMission.Web/Startup.cs +++ b/IntelligentMission.Web/Startup.cs @@ -13,11 +13,10 @@ using Microsoft.AspNetCore.Http; using IntelligentMission.Web.Services; using IntelligentMission.Web.Models; -using Microsoft.WindowsAzure.Storage.Blob; -using Microsoft.WindowsAzure.Storage; using Microsoft.ProjectOxford.Face; using Microsoft.Azure.Documents.Client; using Microsoft.AspNetCore.Mvc; +using Azure.Storage.Blobs; namespace IntelligentMission.Web { @@ -76,8 +75,8 @@ public void ConfigureServices(IServiceCollection services) services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(p => p.GetService().CreateCloudStorageAccount2()); - services.AddTransient(p => p.GetService().CreateCloudBlobClient()); + services.AddTransient(p => p.GetService().CreateBlobServiceClient2()); + services.AddTransient(p => p.GetService().CreateBlobServiceClient()); services.AddTransient(p => p.GetService().CreateFaceServiceClient2()); services.AddTransient(p => p.GetService().CreateDocumentClient2());