Aracılığıyla paylaş


Azure Depolama'da Verileri Depolama ve ErişmeXamarin.Forms

Azure Depolama yapılandırılmamış ve yapılandırılmış verileri depolamak için kullanılabilen ölçeklenebilir bir bulut depolama çözümüdür. Bu makalede, Azure Depolama'da metin ve ikili verileri depolamak için nasıl kullanılacağı Xamarin.Forms ve verilere nasıl eriş kullanılacağı gösterilmektedir.

Azure Depolama dört depolama hizmeti sağlar:

  • Blob Depolama. Blob, yedekler, 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 protokolunu kullanarak paylaşılan depolama sağlar.

İki tür depolama hesabı vardır:

  • Genel amaçlı depolama hesapları, Azure Depolama hizmetlerine tek bir hesaptan erişim sağlar.
  • Blob depolama hesabı, blobları depolamak için özel bir depolama hesabıdır. Bu hesap türü yalnızca blob verilerini depolamanız gerektiğinde önerilir.

Bu makalede ve örnek uygulamayla birlikte blob depolamaya görüntü ve metin dosyalarının yüklenmesi ve indirilmesi gösterilmektedir. Buna ek olarak, blob depolamadan dosya listesini alma ve dosyaları silme işlemleri de gösterilmektedir.

Azure Depolama hakkında daha fazla bilgi için bkz. Depolama giriş.

Not

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Blob Depolama giriş

Blob depolama, aşağıdaki diyagramda gösterilen üç bileşenden oluşur:

Blob Depolama Kavramları

Azure Depolama'a tüm erişim bir depolama hesabı üzerinden yapılır. Depolama hesabı sınırsız sayıda kapsayıcı içerebilir ve kapsayıcı, depolama hesabının kapasite sınırına kadar sınırsız sayıda blob depolayabilir.

Blob, herhangi bir türde ve boyutta bir dosyadır. Azure Depolama üç farklı blob türünü destekler:

  • Blok blobları bulut nesnelerinin akışını ve depolanması için iyileştirilmiştir ve yedeklemeleri, medya dosyalarını, belgeleri vb. depolamak için iyi bir seçimdir. Blok bloblarının boyutu 195 Gb'a kadar olabilir.
  • Ekleme blobları blok bloblarına benzer ancak günlük kaydı gibi ekleme işlemleri için iyileştirilmiştir. Ekleme bloblarının boyutu en fazla 195 Gb olabilir.
  • Sayfa blobları sık 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ının boyutu en fazla 1 Tb olabilir.

Not

Blob depolama hesaplarının blok ve ekleme bloblarını desteklediğini ancak sayfa bloblarını desteklemediğini unutmayın.

Blob, Azure Depolama'a yüklenir ve bayt akışı olarak Azure Depolama'dan indirilir. Bu nedenle, dosyaların karşıya yüklenmeden önce bir bayt akışına dönüştürülmesi ve indirmeden sonra özgün gösterimlerine geri dönüştürülmesi gerekir.

Azure Depolama'da 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 ise depolama hesabı için bir uç nokta oluşturur. Örneğin, depolama hesabınızın adı mystorageaccount ise, depolama hesabının varsayılan blob uç noktası olur https://mystorageaccount.blob.core.windows.net.

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/myblobolacaktır.

Ayarlama

Azure Depolama hesabını bir Xamarin.Forms uygulamayla tümleştirme işlemi aşağıdaki gibidir:

  1. Depolama hesabı oluşturma. Daha fazla bilgi için bkz. Depolama hesabı oluşturma.
  2. Azure Depolama İstemci Kitaplığı'nıXamarin.Forms uygulamaya ekleyin.
  3. Depolama bağlantı dizesi yapılandırın. Daha fazla bilgi için bkz. Azure Depolama'a Bağlan.
  4. Azure Depolama erişecek sınıflara ve Microsoft.WindowsAzure.Storage.Blob ad alanları için Microsoft.WindowsAzure.Storage yönergeler ekleyinusing.

Azure Depolama’ya bağlanma

Depolama hesabı kaynaklarından yapılan her isteğin kimliği doğrulanmalıdır. Bloblar anonim kimlik doğrulamasını destekleyecek şekilde yapılandırılabilir ancak 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şım, depolama hizmetlerine erişmek için Azure Depolama hesap adını ve hesap anahtarını kullanır. Depolama hesabına oluşturma işleminde paylaşılan anahtar kimlik doğrulaması için kullanılabilecek iki özel anahtar atanır.
  • Paylaşılan Erişim İmzası. Bu, geçerli olduğu süre boyunca, belirttiği izinlerle bir depolama kaynağına temsilci erişimi sağlayan bir URL'ye eklenebilen bir belirteçtir.

Bir uygulamadan Azure Depolama kaynaklarına erişmek için gereken kimlik doğrulama bilgilerini içeren Bağlan ion dizeleri belirtilebilir. Ayrıca, Visual Studio'dan Azure depolama öykünücüsine bağlanmak için bir bağlantı dizesi yapılandırılabilir.

Not

Azure Depolama bir bağlantı dizesi HTTP ve HTTPS desteği sunar. Ancak HTTPS kullanılması önerilir.

Azure Depolama Öykünücüsü'ne Bağlan

Azure depolama öykünücüsü, geliştirme amacıyla Azure blobu, kuyruğu ve tablo hizmetlerini öykünen yerel bir ortam sağlar.

Azure depolama öykünücüsine bağlanmak 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ü kullanma.

Paylaşılan Anahtar Kullanarak Azure Depolama'a Bağlan

Paylaşılan anahtarla Azure Depolama bağlanmak için aşağıdaki bağlantı dizesi biçimi kullanılmalıdır:

DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey

myAccountName depolama hesabınızın adıyla değiştirilmelidir ve myAccountKey iki hesap erişim anahtarınızdan biriyle değiştirilmelidir.

Not

Paylaşılan anahtar kimlik doğrulaması kullanılırken, hesap adınız ve hesap anahtarınız uygulamanızı kullanan her kişiye dağıtılır ve bu da depolama hesabına tam okuma/yazma erişimi sağlar. Bu nedenle, paylaşılan anahtar kimlik doğrulamasını yalnızca test amacıyla kullanın ve anahtarları hiçbir zaman diğer kullanıcılara dağıtmayın.

Paylaşılan Erişim İmzası kullanarak Azure Depolama'a Bağlan

Sas ile Azure Depolama bağlanmak için aşağıdaki bağlantı dizesi biçimi kullanılmalıdır:

BlobEndpoint=myBlobEndpoint;SharedAccessSignature=mySharedAccessSignature

myBlobEndpoint blob uç noktanızın mySharedAccessSignature URL'si ile ve SAS'nizle değiştirilmelidir. SAS, kaynağa erişmek için protokolü, hizmet uç noktasını ve kimlik bilgilerini sağlar.

Not

Üretim uygulamaları için SAS kimlik doğrulaması önerilir. Ancak, bir üretim uygulamasında SAS, uygulamayla birlikte paketlenmek yerine isteğe bağlı olarak bir arka uç hizmetinden alınmalıdır.

Paylaşılan Erişim İmzaları hakkında daha fazla bilgi için bkz . Paylaşılan Erişim İmzalarını (SAS) Kullanma.

Kapsayıcı Oluşturma

GetContainer yöntemi, adlandırılmış bir kapsayıcıya başvuru almak için kullanılır. Bu başvuru daha sonra kapsayıcıdan blob almak veya kapsayıcıya blob eklemek için kullanılabilir. Aşağıdaki kod örneği yöntemini gösterir GetContainer :

static CloudBlobContainer GetContainer(ContainerType containerType)
{
  var account = CloudStorageAccount.Parse(Constants.StorageConnection);
  var client = account.CreateCloudBlobClient();
  return client.GetContainerReference(containerType.ToString().ToLower());
}

CloudStorageAccount.Parse yöntemi bir bağlantı dizesi ayrıştırarak depolama hesabını temsil eden bir CloudStorageAccount örnek döndürür. Kapsayıcıları CloudBlobClient ve blobları almak için kullanılan bir örnek, yöntemi tarafından CreateCloudBlobClient oluşturulur. GetContainerReference yöntemi, çağrı yöntemine döndürülmeden önce belirtilen kapsayıcıyı örnek CloudBlobContainer olarak alır. Bu örnekte kapsayıcı adı, küçük harfli bir dizeye dönüştürülen numaralandırma değeridir ContainerType .

Not

Kapsayıcı adları küçük harfli olmalı ve harf veya sayı ile başlamalıdır. Buna ek olarak, bunlar yalnızca harf, sayı ve tire karakteri içerebilir ve 3 ile 63 karakter uzunluğunda olmalıdır.

GetContainer yöntemi aşağıdaki gibi çağrılır:

var container = GetContainer(containerType);

Daha CloudBlobContainer sonra örnek, henüz mevcut değilse kapsayıcı oluşturmak için kullanılabilir:

await container.CreateIfNotExistsAsync();

Varsayılan olarak, yeni oluşturulan bir kapsayıcı özeldir. Bu, kapsayıcıdan blobları almak için bir depolama erişim anahtarının belirtilmesi gerektiği anlamına gelir. Kapsayıcı içinde blob oluşturma hakkında bilgi için bkz . Kapsayıcı oluşturma.

Kapsayıcıya Veri Yükleme

UploadFileAsync yöntemi, blob depolamaya bayt verisi akışı 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;
}

Bir kapsayıcı başvurusu aldıktan sonra yöntemi, henüz yoksa kapsayıcıyı oluşturur. Ardından benzersiz bir blob adı olarak davranacak yeni Guid bir blob oluşturulur ve örnek olarak bir CloudBlockBlob blob bloğu başvurusu alınır. Daha sonra veri akışı, blob henüz yoksa blobu oluşturan veya varsa üzerine yazan yöntemi kullanılarak UploadFromStreamAsync bloba yüklenir.

Bir dosyanın bu yöntem kullanılarak blob depolamaya yüklenebilmesi için önce bayt akışına dönüştürülmesi gerekir. Bu, aşağıdaki kod örneğinde gösterilmiştir:

var byteData = Encoding.UTF8.GetBytes(text);
uploadedFilename = await AzureStorage.UploadFileAsync(ContainerType.Text, new MemoryStream(byteData));

Veriler text bir bayt dizisine dönüştürülür ve ardından yöntemine UploadFileAsync geçirilen bir akış olarak sarmalanır.

Kapsayıcıdan Veri İndirme

GetFileAsync yöntemi, Azure Depolama'dan blob verilerini indirmek için kullanılır ve aşağıdaki kod örneğinde gösterilir:

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;
}

Bir kapsayıcı başvurusu aldıktan sonra yöntemi, depolanan veriler için bir blob başvurusu alır. Blob varsa, özellikleri yöntemi tarafından FetchAttributesAsync alınır. Doğru boyutta bir bayt dizisi oluşturulur ve blob, çağıran yönteme döndürülen bir bayt dizisi olarak indirilir.

Blob bayt verileri indirildikten sonra özgün gösterimine dönüştürülmelidir. Bu, aşağıdaki kod örneğinde gösterilmiştir:

var byteData = await AzureStorage.GetFileAsync(ContainerType.Text, uploadedFilename);
string text = Encoding.UTF8.GetString(byteData);

Bayt dizisi, UTF8 ile kodlanmış bir dizeye GetFileAsync geri dönüştürülmeden önce yöntemiyle Azure Depolama'dan alınır.

Kapsayıcıdaki Verileri Listeleme

GetFilesListAsync yöntemi, bir kapsayıcıda depolanan blobların listesini almak için kullanılır ve aşağıdaki kod örneğinde gösterilir:

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;
}

Bir kapsayıcı başvurusu aldıktan sonra yöntemi, kapsayıcı içindeki bloblara başvuru almak için kapsayıcının ListBlobsSegmentedAsync yöntemini kullanır. yöntemi tarafından ListBlobsSegmentedAsync döndürülen sonuçlar, örneği değilken BlobContinuationTokennullnumaralandırılır. Her blob, değeri koleksiyona eklenmeden önce blobun özelliğine erişmek Name için döndürülen IListBlobItem blobdan allBlobsList 'CloudBlockBloba atılır. BlobContinuationToken Örnek olduğundanull, son blob adı döndürülür ve yürütme döngüden çıkar.

Kapsayıcıdan Veri Silme

DeleteFileAsync yöntemi, kapsayıcıdan bir blobu silmek için kullanılır ve aşağıdaki kod örneğinde gösterilir:

public static async Task<bool> DeleteFileAsync(ContainerType containerType, string name)
{
  var container = GetContainer(containerType);
  var blob = container.GetBlobReference(name);
  return await blob.DeleteIfExistsAsync();
}

Bir kapsayıcı başvurusu aldıktan sonra yöntemi, belirtilen blob için bir blob başvurusu alır. Blob daha sonra yöntemiyle DeleteIfExistsAsync silinir.