Bagikan melalui


Menyimpan dan Mengakses Data di Azure Storage dari Xamarin.Forms

Azure Storage adalah solusi penyimpanan cloud yang dapat diskalakan yang dapat digunakan untuk menyimpan data yang tidak terstruktur dan terstruktur. Artikel ini menunjukkan cara menggunakan Xamarin.Forms untuk menyimpan teks dan data biner di Azure Storage, dan cara mengakses data.

Azure Storage menyediakan empat layanan penyimpanan:

  • Blob Storage. Blob dapat berupa teks atau data biner, seperti cadangan, komputer virtual, file media, atau dokumen.
  • Table Storage adalah penyimpanan atribut kunci NoSQL.
  • Queue Storage adalah layanan olahpesan untuk pemrosesan alur kerja dan komunikasi antara layanan cloud.
  • Penyimpanan File menyediakan penyimpanan bersama menggunakan protokol SMB.

Ada dua jenis akun penyimpanan:

  • Akun penyimpanan tujuan umum menyediakan akses ke layanan Azure Storage dari satu akun.
  • Akun penyimpanan Blob adalah akun penyimpanan khusus untuk menyimpan blob. Jenis akun ini disarankan ketika Anda hanya perlu menyimpan data blob.

Artikel ini, dan aplikasi sampel yang menyertainya, menunjukkan pengunggahan file gambar dan teks ke penyimpanan blob, dan mengunduhnya. Selain itu, ini juga menunjukkan pengambilan daftar file dari penyimpanan blob, dan menghapus file.

Untuk informasi selengkapnya tentang Azure Storage, lihat Pengenalan Penyimpanan.

Catatan

Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.

Pengantar Blob Storage

Penyimpanan blob terdiri dari tiga komponen, yang ditunjukkan dalam diagram berikut:

Konsep Penyimpanan Blob

Semua akses ke Azure Storage adalah melalui akun penyimpanan. Akun penyimpanan dapat berisi jumlah kontainer yang tidak terbatas, dan kontainer dapat menyimpan blob dalam jumlah tak terbatas, hingga batas kapasitas akun penyimpanan.

Blob adalah file dengan jenis dan ukuran apa pun. Azure Storage mendukung tiga jenis blob yang berbeda:

  • Blob blok dioptimalkan untuk streaming dan penyimpanan objek cloud, dan merupakan pilihan yang baik untuk menyimpan cadangan, file media, dokumen, dll. Blob blok dapat berukuran hingga 195Gb.
  • Blob penambahan mirip dengan blob blok tetapi dioptimalkan untuk operasi penambahan, seperti pengelogan. Blob tambahan dapat berukuran hingga 195Gb.
  • Blob halaman dioptimalkan untuk operasi baca/tulis yang sering dan biasanya digunakan untuk menyimpan komputer virtual, dan disknya. Blob halaman dapat berukuran hingga 1 Tb.

Catatan

Perhatikan bahwa akun penyimpanan blob mendukung blob blok dan penambahan, tetapi bukan blob halaman.

Blob diunggah ke Azure Storage, dan diunduh dari Azure Storage, sebagai aliran byte. Oleh karena itu, file harus dikonversi ke aliran byte sebelum diunggah, dan dikonversi kembali ke representasi aslinya setelah diunduh.

Setiap objek yang disimpan di Azure Storage memiliki alamat URL unik. Nama akun penyimpanan membentuk subdomain alamat tersebut, dan kombinasi subdomain dan nama domain membentuk titik akhir untuk akun penyimpanan. Misalnya, jika akun penyimpanan Anda bernama mystorageaccount, titik akhir blob default untuk akun penyimpanan adalah https://mystorageaccount.blob.core.windows.net.

URL untuk mengakses objek di akun penyimpanan dibuat dengan menambahkan lokasi objek di akun penyimpanan ke titik akhir. Misalnya, alamat blob akan memiliki format https://mystorageaccount.blob.core.windows.net/mycontainer/myblob.

Siapkan

Proses untuk mengintegrasikan akun Azure Storage ke dalam aplikasi Xamarin.Forms adalah sebagai berikut:

  1. Membuat akun penyimpanan. Untuk informasi selengkapnya, lihat Membuat akun penyimpanan.
  2. Tambahkan Pustaka Klien Azure Storage ke Xamarin.Forms aplikasi.
  3. Konfigurasikan string koneksi penyimpanan. Untuk informasi selengkapnya, lihat Koneksi ke Azure Storage.
  4. Tambahkan using direktif untuk Microsoft.WindowsAzure.Storage namespace layanan dan Microsoft.WindowsAzure.Storage.Blob ke kelas yang akan mengakses Azure Storage.

Koneksi ke Azure Storage

Setiap permintaan yang dibuat terhadap sumber daya akun penyimpanan harus diautentikasi. Meskipun blob dapat dikonfigurasi untuk mendukung autentikasi anonim, ada dua pendekatan utama yang dapat digunakan aplikasi untuk mengautentikasi dengan akun penyimpanan:

  • Kunci Bersama. Pendekatan ini menggunakan nama akun Azure Storage dan kunci akun untuk mengakses layanan penyimpanan. Akun penyimpanan diberi dua kunci privat pada pembuatan yang dapat digunakan untuk autentikasi kunci bersama.
  • Tanda Tangan Akses Bersama. Ini adalah token yang dapat ditambahkan ke URL yang memungkinkan akses yang didelegasikan ke sumber daya penyimpanan, dengan izin yang ditentukannya, untuk jangka waktu valid.

string Koneksi ion dapat ditentukan yang menyertakan informasi autentikasi yang diperlukan untuk mengakses sumber daya Azure Storage dari aplikasi. Selain itu, string koneksi dapat dikonfigurasi untuk terhubung ke emulator penyimpanan Azure dari Visual Studio.

Catatan

Azure Storage mendukung HTTP dan HTTPS dalam string koneksi. Namun, menggunakan HTTPS disarankan.

Koneksi ke Emulator Azure Storage

Emulator penyimpanan Azure menyediakan lingkungan lokal yang meniru layanan blob, antrean, dan tabel Azure untuk tujuan pengembangan.

String koneksi berikut harus digunakan untuk menyambungkan ke emulator penyimpanan Azure:

UseDevelopmentStorage=true

Untuk informasi selengkapnya tentang emulator penyimpanan Azure, lihat Menggunakan emulator penyimpanan Azure untuk Pengembangan dan pengujian.

Koneksi ke Azure Storage Menggunakan Kunci Bersama

Format string koneksi berikut harus digunakan untuk menyambungkan ke Azure Storage dengan kunci bersama:

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

myAccountName harus diganti dengan nama akun penyimpanan Anda, dan myAccountKey harus diganti dengan salah satu dari dua kunci akses akun Anda.

Catatan

Saat menggunakan autentikasi kunci bersama, nama akun dan kunci akun Anda akan didistribusikan ke setiap orang yang menggunakan aplikasi Anda, yang akan menyediakan akses baca/tulis penuh ke akun penyimpanan. Oleh karena itu, gunakan autentikasi kunci bersama hanya untuk tujuan pengujian, dan jangan pernah mendistribusikan kunci kepada pengguna lain.

Koneksi ke Azure Storage menggunakan Tanda Tangan Akses Bersama

Format string koneksi berikut harus digunakan untuk menyambungkan ke Azure Storage dengan SAS:

BlobEndpoint=myBlobEndpoint;SharedAccessSignature=mySharedAccessSignature

myBlobEndpoint harus diganti dengan URL titik akhir blob Anda, dan mySharedAccessSignature harus diganti dengan SAS Anda. SAS menyediakan protokol, titik akhir layanan, dan kredensial untuk mengakses sumber daya.

Catatan

Autentikasi SAS direkomendasikan untuk aplikasi produksi. Namun, dalam aplikasi produksi, SAS harus diambil dari layanan backend sesuai permintaan, daripada dibundel dengan aplikasi.

Untuk informasi selengkapnya tentang Tanda Tangan Akses Bersama, lihat Menggunakan Tanda Tangan Akses Bersama (SAS).

Membuat Kontainer

Metode GetContainer ini digunakan untuk mengambil referensi ke kontainer bernama, yang kemudian dapat digunakan untuk mengambil blob dari kontainer atau untuk menambahkan blob ke kontainer. Contoh kode berikut menunjukkan GetContainer metode :

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

Metode ini CloudStorageAccount.Parse menguraikan string koneksi dan mengembalikan instans CloudStorageAccount yang mewakili akun penyimpanan. CloudBlobClient Instans, yang digunakan untuk mengambil kontainer dan blob, kemudian dibuat oleh CreateCloudBlobClient metode . Metode mengambil GetContainerReference kontainer yang ditentukan sebagai CloudBlobContainer instans, sebelum dikembalikan ke metode panggilan. Dalam contoh ini, nama kontainer adalah ContainerType nilai enumerasi, dikonversi ke string huruf kecil.

Catatan

Nama kontainer harus huruf kecil, dan harus dimulai dengan huruf atau angka. Selain itu, mereka hanya dapat berisi huruf, angka, dan karakter tanda hubung, dan panjangnya harus antara 3 dan 63 karakter.

Metode GetContainer ini dipanggil sebagai berikut:

var container = GetContainer(containerType);

Instans CloudBlobContainer kemudian dapat digunakan untuk membuat kontainer jika belum ada:

await container.CreateIfNotExistsAsync();

Secara default, kontainer yang baru dibuat bersifat privat. Ini berarti bahwa kunci akses penyimpanan harus ditentukan untuk mengambil blob dari kontainer. Untuk informasi tentang membuat blob dalam kontainer publik, lihat Membuat kontainer.

Mengunggah Data ke Kontainer

Metode UploadFileAsync ini digunakan untuk mengunggah aliran data byte ke penyimpanan blob, dan ditampilkan dalam contoh kode berikut:

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

Setelah mengambil referensi kontainer, metode membuat kontainer jika belum ada. Guid Baru kemudian dibuat untuk bertindak sebagai nama blob unik, dan referensi blok blob diambil sebagai CloudBlockBlob instans. Aliran data kemudian diunggah ke blob menggunakan UploadFromStreamAsync metode , yang membuat blob jika belum ada, atau menimpanya jika memang ada.

Sebelum file dapat diunggah ke penyimpanan blob menggunakan metode ini, file harus terlebih dahulu dikonversi ke aliran byte. Ini ditunjukkan dalam contoh kode berikut:

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

Data text dikonversi ke array byte, yang kemudian dibungkus sebagai aliran yang diteruskan ke UploadFileAsync metode .

Mengunduh Data dari Kontainer

Metode GetFileAsync ini digunakan untuk mengunduh data blob dari Azure Storage, dan diperlihatkan dalam contoh kode berikut:

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

Setelah mengambil referensi kontainer, metode mengambil referensi blob untuk data yang disimpan. Jika blob ada, propertinya diambil oleh FetchAttributesAsync metode . Array byte dengan ukuran yang benar dibuat, dan blob diunduh sebagai array byte yang dikembalikan ke metode panggilan.

Setelah mengunduh data byte blob, data tersebut harus dikonversi ke representasi aslinya. Ini ditunjukkan dalam contoh kode berikut:

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

Array byte diambil dari Azure Storage dengan GetFileAsync metode , sebelum dikonversi kembali ke string yang dikodekan UTF8.

Mencantumkan Data dalam Kontainer

Metode GetFilesListAsync ini digunakan untuk mengambil daftar blob yang disimpan dalam kontainer, dan diperlihatkan dalam contoh kode berikut:

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

Setelah mengambil referensi kontainer, metode menggunakan metode kontainer ListBlobsSegmentedAsync untuk mengambil referensi ke blob dalam kontainer. Hasil yang dikembalikan oleh ListBlobsSegmentedAsync metode dijumlahkan sementara BlobContinuationToken instans bukan null. Setiap blob dilemparkan dari yang dikembalikan IListBlobItem ke CloudBlockBlob untuk mengakses Name properti blob, sebelum nilai ditambahkan ke allBlobsList koleksi. BlobContinuationToken Setelah instans adalah null, nama blob terakhir telah dikembalikan, dan eksekusi keluar dari perulangan.

Menghapus Data dari Kontainer

Metode DeleteFileAsync ini digunakan untuk menghapus blob dari kontainer, dan ditampilkan dalam contoh kode berikut:

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

Setelah mengambil referensi kontainer, metode mengambil referensi blob untuk blob yang ditentukan. Blob kemudian dihapus dengan DeleteIfExistsAsync metode .