Azure depolama ve erişim DepolamaXamarin.Forms
Azure Depolama, yapılandırılmamış ve yapılandırılmış verileri depolamak için kullanılan ölçeklenebilir bir bulut depolama çözümüdür. Bu makalede, Metin ve ikili verileri Azure Depolama depolamak için kullanma ve Xamarin.Forms verilere erişme hakkında bilgi ve bilgiler yer almaktadır.
Azure Depolama dört depolama hizmeti sağlar:
- Blob Depolama. Blob; yedeklemeler, sanal makineler, medya dosyaları veya belgeler gibi metin veya ikili veriler olabilir.
- Tablo Depolama bir NoSQL anahtar-öznitelik deposudur.
- Kuyruk Depolama, iş akışı işleme ve bulut hizmetleri arasındaki iletişim için bir mesajlaşma hizmetidir.
- Dosya Depolama, SMB protokolünü kullanarak paylaşılan depolama sağlar.
İki tür depolama hesabı vardır:
- Genel amaçlı depolama hesapları, Tek bir hesaptan Azure Depolama hizmetlere erişim sağlar.
- Blob depolama hesabı, blobları depolamak için kullanılan özel bir depolama hesabıdır. Bu hesap türü yalnızca blob verilerini depolamanız gerektiği zaman önerilir.
Bu makale ve beraberindeki örnek uygulama, blob depolamaya görüntü ve metin dosyalarını yükleme ve indirmeyi gösteriyor. Ayrıca, blob depolamadan dosya listesini alma ve dosyaları silmeyi de gösteriyor.
Azure Depolama hakkında daha fazla bilgi için bkz. Depolama.
Not
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Blob depolamaya Depolama
Blob depolama, aşağıdaki diyagramda gösterilen üç bileşenden oluşur:

Azure veritabanına Depolama bir depolama hesabı üzerinden erişebilirsiniz. Depolama hesabı sınırsız sayıda kapsayıcı içerebilir ve bir kapsayıcı depolama hesabının kapasite sınırına kadar sınırsız sayıda blob depolar.
Blob herhangi bir türde ve boyutta bir dosyadır. Azure Depolama üç farklı blob türü destekler:
- Blok blobları bulut nesnelerinin akışı ve depolanması için iyileştirilmiştir ve yedeklemeleri, medya dosyalarını, belgeleri vb. depolamak için iyi bir seçimdir. Blok blobları en fazla 195 Gb boyutunda olabilir.
- Ekleme blobları blok bloblarına benzer ancak günlük kaydı gibi ekleme işlemleri için iyileştirilmiştir. Ekleme blobları en fazla 195 Gb boyutunda olabilir.
- Sayfa blobları sık okuma/yazma işlemleri için iyileştirilmiştir ve genellikle sanal makineleri ve disklerini depolamak için kullanılır. Sayfa blobları boyutu 1 TB'a kadar olabilir.
Not
Blob depolama hesapları blok ve ekleme bloblarını destekler ancak sayfa bloblarını desteklemez.
Blob, Azure Depolama'a yüklenir ve azure Depolama bayt akışı olarak indirilir. Bu nedenle, dosyalar karşıya yüklenmeden önce bir bayt akışına dönüştürülmesi ve indirmeden sonra özgün gösterimine geri dönüştürülmesi gerekir.
Azure Depolama'de depolanan her nesnenin benzersiz bir URL adresi vardır. Depolama hesabı adı, bu adresin alt etki alanını, alt etki alanı ve etki alanı adı birleşimi de depolama hesabı için bir uç nokta oluşturur. Örneğin, depolama hesabınız mystorageaccount olarak adlandırılmışsa,depolama hesabı için varsayılan blob uç noktası olur.
Bir depolama hesabındaki bir nesneye erişmek için gerekli URL, nesnenin depolama hesabındaki konumunun uç noktaya eklenmesiyle oluşturulur. Örneğin, bir blob adresi biçiminde https://mystorageaccount.blob.core.windows.net/mycontainer/myblob olur.
Kurulum
Azure Depolama hesabını bir uygulamayla tümleştirme Xamarin.Forms işlemi aşağıdaki gibidir:
- Depolama hesabı oluşturma. Daha fazla bilgi için bkz. Depolama hesabı oluşturma.
- Uygulamaya Azure Depolama İstemci Kitaplığını ekleyin.
- Depolama bağlantı dizesini yapılandırma. Daha fazla bilgi için bkz. Azure Depolama.
usingVe ad alanlarıMicrosoft.WindowsAzure.StorageMicrosoft.WindowsAzure.Storage.Blobyönergelerini Azure veritabanına erişecek sınıflara Depolama.
Azure Depolama’ya bağlanma
Depolama hesabı kaynaklarından yapılan her isteğin kimliği doğrulanması gerekir. Bloblar anonim kimlik doğrulamasını destekleyecek şekilde yalıtulsa da, bir uygulamanın depolama hesabıyla kimlik doğrulaması yapmak için kullanabileceği iki ana yaklaşım vardır:
- Paylaşılan Anahtar. Bu yaklaşımda depolama Depolama hesap adı ve hesap anahtarı azure hesabı adı ve anahtarı 1. Depolama hesabına, oluşturma sırasında paylaşılan anahtar kimlik doğrulaması için kullanılan iki özel anahtar atanır.
- Paylaşılan Erişim İmzası. Bu, geçerli olduğu süre boyunca belirtilen izinlerle bir depolama kaynağına temsilci erişimi sağlayan bir URL'ye eklenilen bir belirteçtir.
Azure kaynaklarına erişmek için gereken kimlik doğrulama bilgilerini içeren bağlantı dizeleri Depolama bir uygulamanın kaynakları olabilir. Ayrıca, bir bağlantı dizesi azure depolama öykünücüsünü sanal ağdan bağlamak Visual Studio.
Not
Azure Depolama bağlantı dizesinde HTTP ve HTTPS'yi destekler. Ancak HTTPS kullanılması önerilir.
Azure Depolama Emulator'a bağlanma
Azure depolama öykünücüsü, geliştirme amacıyla Azure blob, kuyruk ve tablo hizmetleriyle öykünen yerel bir ortam sağlar.
Azure depolama öykünücüsünü bağlamak için aşağıdaki bağlantı dizesi kullanılmalıdır:
UseDevelopmentStorage=true
Azure depolama öykünücüsü hakkında daha fazla bilgi için bkz. Geliştirme ve test için Azure depolama öykünücüsünü kullanma.
Paylaşılan Anahtar kullanarak Azure Depolama'a bağlanma
Paylaşılan anahtarla Azure veritabanına bağlanmak için aşağıdaki bağlantı Depolama biçimi kullanılmalıdır:
DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey
myAccountName yerine depolama hesabınız adını, yerine de iki hesap erişim myAccountKey anahtarınızı yazın.
Not
Paylaşılan anahtar kimlik doğrulaması kullanılırken, hesap adınız ve hesap anahtarınız, depolama hesabına tam okuma/yazma erişimi sağlayacak şekilde, uygulamanızı kullanan her kişiye dağıtılır. Bu nedenle, paylaşılan anahtar kimlik doğrulamasını yalnızca test amacıyla kullanın ve hiçbir zaman anahtarları diğer kullanıcılara dağıtmayın.
Paylaşılan Erişim İmzası Depolama Azure veritabanına bağlanma
Sas ile Azure veritabanına bağlanmak için aşağıdaki bağlantı dizesi Depolama kullanılmalıdır:
BlobEndpoint=myBlobEndpoint;SharedAccessSignature=mySharedAccessSignature
myBlobEndpoint yerine blob uç noktanın URL'sini, yerine de mySharedAccessSignature SAS'nizi yazın. SAS, kaynağa erişmek için protokolü, hizmet uç noktasını ve kimlik bilgilerini sağlar.
Not
Sas kimlik doğrulaması üretim uygulamaları için önerilir. Ancak, bir üretim uygulamasında SAS, uygulamayla paket yerine isteğe bağlı bir arka uç hizmetten alınarak alınır.
Paylaşılan Erişim İmzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzaları (SAS) Kullanma.
Kapsayıcı Oluşturma
yöntemi, adlandırılmış kapsayıcıya başvuru almak için kullanılır. Bu başvuru daha sonra kapsayıcıdan blobları almak veya kapsayıcıya blob eklemek GetContainer için kullanılabilir. Aşağıdaki kod örneği yöntemini GetContainer gösterir:
static CloudBlobContainer GetContainer(ContainerType containerType)
{
var account = CloudStorageAccount.Parse(Constants.StorageConnection);
var client = account.CreateCloudBlobClient();
return client.GetContainerReference(containerType.ToString().ToLower());
}
yöntemi CloudStorageAccount.Parse bir bağlantı dizesini ayrıştırıyor ve depolama CloudStorageAccount hesabını temsil eden bir örnek döndürür. Kapsayıcıları CloudBlobClient ve blobları almak için kullanılan bir örnek daha sonra yöntemiyle CreateCloudBlobClient oluşturulur. yöntemi, GetContainerReference çağıran yönteme CloudBlobContainer döndürülmeden önce belirtilen kapsayıcıyı örnek olarak almaktadır. Bu örnekte kapsayıcı adı, küçük ContainerType harfli dizeye dönüştürülmüş bir numaralama değeridir.
Not
Kapsayıcı adları küçük harfli olmalı ve bir harf veya sayı ile başla olmalıdır. Ayrıca yalnızca harf, rakam ve tire karakteri içerebilir ve 3 ile 63 karakter uzunluğunda olmalıdır.
GetContaineryöntemi aşağıdaki gibi çağrılır:
var container = GetContainer(containerType);
Örnek CloudBlobContainer daha sonra henüz mevcut olmayan bir kapsayıcı oluşturmak için kullanılabilir:
await container.CreateIfNotExistsAsync();
Yeni oluşturulan kapsayıcı varsayılan olarak özeldir. Bu, kapsayıcıdan blobları almak için depolama erişim anahtarının belirtilmelidir. Kapsayıcı içindeki blobları genel yapma hakkında bilgi için bkz. Kapsayıcı oluşturma.
Kapsayıcıya Veri Yükleme
yöntemi, UploadFileAsync bir byte veri akışını blob depolamaya yüklemek için kullanılır ve aşağıdaki kod örneğinde gösterilmiştir:
public static async Task<string> UploadFileAsync(ContainerType containerType, Stream stream)
{
var container = GetContainer(containerType);
await container.CreateIfNotExistsAsync();
var name = Guid.NewGuid().ToString();
var fileBlob = container.GetBlockBlobReference(name);
await fileBlob.UploadFromStreamAsync(stream);
return name;
}
Kapsayıcı başvurusu aldıktan sonra yöntemi, henüz yoksa kapsayıcıyı oluşturur. Ardından benzersiz bir blob adı olarak hareket etmek için yeni bir oluşturulur ve bir blob bloğu Guid başvurusu örnek olarak CloudBlockBlob alınır. Ardından veri akışı bloba, henüz yoksa blobu oluşturan veya varsa üzerine yazarak blobu oluşturan yöntemini UploadFromStreamAsync kullanarak karşıya yükler.
Bir dosyanın bu yöntemi kullanarak blob depolamaya yüklenmeden önce bir byte akışına dönüştürülmesi gerekir. Bu, aşağıdaki kod örneğinde gösterildi:
var byteData = Encoding.UTF8.GetBytes(text);
uploadedFilename = await AzureStorage.UploadFileAsync(ContainerType.Text, new MemoryStream(byteData));
Veriler, daha sonra yöntemine geçirilen bir akış olarak text sarmalanmış bir byte dizisine UploadFileAsync dönüştürülür.
Kapsayıcıdan Veri İndirme
yöntemi, Azure Depolama blob verilerini indirmek için GetFileAsync kullanılır ve aşağıdaki kod örneğinde gösterilmiştir:
public static async Task<byte[]> GetFileAsync(ContainerType containerType, string name)
{
var container = GetContainer(containerType);
var blob = container.GetBlobReference(name);
if (await blob.ExistsAsync())
{
await blob.FetchAttributesAsync();
byte[] blobBytes = new byte[blob.Properties.Length];
await blob.DownloadToByteArrayAsync(blobBytes, 0);
return blobBytes;
}
return null;
}
Kapsayıcı başvurusu alındıktan sonra yöntemi depolanan veriler için bir blob başvurusu verir. Blob varsa, özellikleri yöntemi tarafından FetchAttributesAsync alınır. Doğru boyutta bir bayt dizisi oluşturulur ve blob, çağrı yöntemine döndürülen bayt dizisi olarak indirilir.
Blob baytı verilerini indirdikten sonra özgün gösterimine dönüştürülmesi gerekir. Bu, aşağıdaki kod örneğinde gösterildi:
var byteData = await AzureStorage.GetFileAsync(ContainerType.Text, uploadedFilename);
string text = Encoding.UTF8.GetString(byteData);
Bayt dizisi, UTF8 Depolama geri dönüştürülmeden önce yöntemi tarafından Azure'dan GetFileAsync alınır.
Kapsayıcıda Verileri Listeleme
yöntemi, GetFilesListAsync kapsayıcıda depolanan blobların listesini almak için kullanılır ve aşağıdaki kod örneğinde gösterilmiştir:
public static async Task<IList<string>> GetFilesListAsync(ContainerType containerType)
{
var container = GetContainer(containerType);
var allBlobsList = new List<string>();
BlobContinuationToken token = null;
do
{
var result = await container.ListBlobsSegmentedAsync(token);
if (result.Results.Count() > 0)
{
var blobs = result.Results.Cast<CloudBlockBlob>().Select(b => b.Name);
allBlobsList.AddRange(blobs);
}
token = result.ContinuationToken;
} while (token != null);
return allBlobsList;
}
Kapsayıcı başvurusu alındıktan sonra yöntemi kapsayıcı içindeki bloblara başvuru ListBlobsSegmentedAsync almak için kapsayıcının yöntemini kullanır. yöntemi tarafından döndürülen ListBlobsSegmentedAsync sonuçlar, örneği değilken BlobContinuationTokennull numaralandı. Her blob, değeri koleksiyona eklenmeden önce blob özelliğine erişmek için döndürülen IListBlobItemCloudBlockBlobName blobdan bir değerine allBlobsList döndürülür. Örnek BlobContinuationToken olduktan null sonra son blob adı döndürülür ve yürütme döngüden çıkar.
Kapsayıcıdan Veri Silme
yöntemi DeleteFileAsync kapsayıcıdan blob silmek için kullanılır ve aşağıdaki kod örneğinde gösterilmiştir:
public static async Task<bool> DeleteFileAsync(ContainerType containerType, string name)
{
var container = GetContainer(containerType);
var blob = container.GetBlobReference(name);
return await blob.DeleteIfExistsAsync();
}
Kapsayıcı başvurusu alındıktan sonra yöntemi, belirtilen blob için bir blob başvurusu verir. Blob daha sonra yöntemiyle DeleteIfExistsAsync silinir.
Örneği indirme