Cara menggunakan penyimpanan Blob dari iOS
Artikel ini memperlihatkan cara melakukan skenario umum menggunakan penyimpanan Microsoft Azure Blob. Sampel ditulis dalam Objective-C dan menggunakan Pustaka Klien Azure Storage untuk iOS. Skenario yang dibahas meliputi mengunggah, mencantumkan, mengunduh, dan menghapus blob. Untuk informasi selengkapnya tentang blob, lihat bagian Langkah Berikutnya. Anda juga dapat mengunduh aplikasi sampel untuk melihat penggunaan Azure Storage dengan cepat di aplikasi iOS.
Untuk mempelajari selengkapnya tentang penyimpanan Blob, lihat Pengantar penyimpanan Azure Blob.
Buat akun penyimpanan Azure
Cara termudah untuk membuat akun penyimpanan Azure pertama Anda adalah dengan menggunakan portal Microsoft Azure. Untuk mempelajari selengkapnya, lihat Buat akun penyimpanan.
Anda juga dapat membuat akun penyimpanan Azure dengan menggunakan Microsoft Azure PowerShell,Azure CLI,atau Penyedia Sumber Daya Microsoft Azure Storage untuk .NET.
Jika Anda lebih suka tidak membuat akun penyimpanan di Azure saat ini, Anda juga dapat menggunakan emulator penyimpanan Azurite untuk menjalankan dan menguji kode Anda di lingkungan lokal. Untuk informasi selengkapnya, lihat Gunakan emulator Azurite untuk pengembangan Microsoft Azure Storage lokal.
Impor pustaka iOS Azure Storage ke dalam aplikasi Anda
Anda dapat mengimpor pustaka iOS Azure Storage ke dalam aplikasi Anda baik dengan menggunakan Azure Storage CocoaPod atau dengan mengimpor file Kerangka Kerja. CocoaPod adalah cara yang direkomendasikan karena memudahkan integrasi pustaka, namun mengimpor dari file kerangka kerja kurang mengganggu proyek Anda yang ada.
Untuk menggunakan pustaka ini, Anda perlu:
- iOS 8+
- XCode 7+
CocoaPod
Jika belum, Instal CocoaPods di komputer Anda dengan membuka jendela terminal dan menjalankan perintah berikut
sudo gem install cocoapodsSelanjutnya, di direktori proyek (direktori yang berisi file .xcodeproj), buat file baru yang disebut Podfile(tanpa ekstensi file). Tambahkan yang berikut ke Podfile dan simpan.
platform :ios, '8.0' target 'TargetName' do pod 'AZSClient' endDi jendela terminal, buka direktori proyek dan jalankan perintah berikut
pod installJika .xcodeproj Anda terbuka di Xcode, tutuplah. Di direktori proyek Anda, buka file proyek yang baru dibuat dengan ekstensi .xcworkspace. Ini adalah file yang akan Anda kerjakan untuk saat ini.
Kerangka Kerja
Cara lain untuk menggunakan pustaka adalah dengan menyusun kerangka kerja secara manual:
- Pertama, unduh atau kloning repo azure-storage-ios.
- Masuk ke azure-storage-ios ->Pustaka ->Pustaka Klien Azure Storage, dan buka
AZSClient.xcodeprojdi Xcode. - Di kiri atas Xcode, ubah skema aktif dari "Pustaka Klien Azure Storage" menjadi "Kerangka Kerja".
- Bangun proyeknya (⌘+B). Ini akan membuat file
AZSClient.frameworkpada Desktop Anda.
Anda lalu dapat mengimpor file kerangka kerja ke aplikasi dengan melakukan hal berikut:
- Buat proyek baru atau buka proyek Anda yang sudah ada di Xcode.
- Seret dan jatuhkan
AZSClient.frameworkke navigator proyek Xcode Anda. - Pilih Salin item jika perlu, dan klik Selesai.
- Klik proyek Anda di navigasi sebelah kiri dan klik tab Umum di bagian atas editor proyek.
- Di bawah bagian Kerangka Kerja dan Pustaka tertaut, klik tombol Tambah (+).
- Dalam daftar pustaka yang sudah disediakan, cari
libxml2.2.tbddan tambahkan ke proyek Anda.
Impor Pustakanya
// Include the following import statement to use blob APIs.
#import <AZSClient/AZSClient.h>
Jika menggunakan Swift, Anda harus membuat header penjembatan dan mengimpor <AZSClient/AZSClient.h> di sana:
- Buat file header
Bridging-Header.h, dan tambahkan pernyataan impor di atas. - Buka tab Pengaturan Build, dan cari Header Bridging Objective-C.
- Klik dua kali pada bidang Objective-C Bridging Header dan tambahkan jalur ke file header Anda:
ProjectName/Bridging-Header.h - Bangun proyek (⌘+B) untuk memastikan bahwa bridging header diambil oleh Xcode.
- Mulailah gunakan pustaka langsung dalam file Swift apa pun, tidak perlu mengimpor pernyataan.
Mengonfigurasi aplikasi Anda untuk mengakses Azure Storage
Ada dua cara untuk mengautentikasi aplikasi Anda untuk mengakses layanan Azure Storage:
- Kunci Berbagi: Menggunakan Kunci Berbagi hanya untuk tujuan pengujian
- Tanda Tangan Akses Berbagi (SAS): Menggunakan SAS untuk aplikasi produksi
Kunci Berbagi
Autentikasi Kunci Berbagi berarti aplikasi Anda akan menggunakan nama akun dan kunci akun Anda untuk mengakses layanan Azure Storage. Untuk tujuan memperlihatkan dengan cepat cara menggunakan pustaka ini, kami akan menggunakan autentikasi Kunci Berbagi dalam memulai ini.
Peringatan
Hanya gunakan autentikasi Kunci Berbagi untuk tujuan pengujian! Nama akun dan kunci akun Anda, yang memberikan akses baca/tulis penuh ke akun Azure Storage terkait, akan didistribusikan kepada setiap orang yang mengunduh aplikasi Anda. Ini bukan praktik yang baik karena Anda berisiko membuat kunci Anda disusupi oleh klien yang tidak tepercaya.
Saat menggunakan autentikasi Kunci Berbagi, Anda akan membuat string koneksi. String koneksi terdiri dari:
- DefaultEndpointsProtocol - Anda dapat memilih HTTP atau HTTPS. Namun, menggunakan HTTPS sangat disarankan.
- Nama Akun - nama akun penyimpanan Anda
- Kunci Akun - Pada Portal Azure, navigasikan ke akun penyimpanan Anda dan klik ikon Kunci untuk menemukan informasi ini.
- (Opsional) EndpointSuffix - Ini digunakan untuk layanan penyimpanan di wilayah dengan akhiran titik akhir yang berbeda, seperti Azure Tiongkok atau Pemerintahan Azure.
Berikut adalah contoh string koneksi menggunakan autentikasi Kunci Berbagi:
"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here"
Tanda Tangan Akses Berbagi (SAS)
Untuk aplikasi seluler, metode yang disarankan untuk mengautentikasi permintaan oleh klien terhadap layanan Azure Storage adalah dengan menggunakan Tanda Tangan Akses Berbagi (SAS). SAS memungkinkan Anda untuk memberikan akses klien ke sumber daya untuk jangka waktu tertentu, dengan set izin yang ditentukan. Sebagai pemilik akun penyimpanan, Anda harus membuat SAS untuk digunakan klien seluler. Untuk menghasilkan SAS, Anda mungkin ingin menulis layanan terpisah yang menghasilkan SAS untuk didistribusikan kepada klien. Untuk tujuan pengujian, Anda dapat menggunakan Penjelajah Microsoft Azure Storage atau Portal Azure untuk menghasilkan SAS. Saat membuat SAS, Anda dapat menentukan interval waktu SAS yang valid, dan izin yang diberikan SAS kepada klien.
Contoh berikut menunjukkan cara menggunakan Microsoft Azure Storage Explorer untuk membuat SAS.
Jika belum, Instal Microsoft Azure Storage Explorer
Hubungkan ke langganan Anda.
Klik akun Penyimpanan Anda dan klik tab "Tindakan" di kiri bawah. Klik "Dapatkan Tanda Tangan Akses Bersama" guna membuat "string koneksi" untuk SAS Anda.
Berikut adalah contoh string koneksi SAS yang memberikan izin baca dan tulis di tingkat layanan, kontainer, dan objek untuk layanan blob akun Penyimpanan.
"SharedAccessSignature=sv=2015-04-05&ss=b&srt=sco&sp=rw&se=2016-07-21T18%3A00%3A00Z&sig=3ABdLOJZosCp0o491T%2BqZGKIhafF1nlM3MzESDDD3Gg%3D;BlobEndpoint=https://youraccount.blob.core.windows.net"
Seperti yang Anda lihat, saat menggunakan SAS, Anda tidak mengekspos kunci akun Anda di aplikasi. Anda dapat mempelajari selengkapnya tentang SAS dan praktik terbaik untuk menggunakan SAS dengan melihat Tanda Tangan Akses Bersama: Memahami model SAS.
Operasi Asinkron
Catatan
Semua metode yang melakukan permintaan terhadap layanan adalah operasi asinkron. Dalam sampel kode, Anda akan menemukan bahwa metode ini memiliki handler penyelesaian. Kode di dalam handler penyelesaian akan berjalan setelah permintaan selesai. Kode setelah handler penyelesaian akan berjalan saat permintaan sedang dibuat.
Buat kontainer
Setiap blob di Azure Storage harus berada dalam kontainer. Contoh berikut menunjukkan cara membuat kontainer, yang disebut newcontainer, di akun Storage Anda jika belum ada. Saat memilih nama untuk kontainer Anda, perhatikan aturan penamaan yang disebutkan di atas.
-(void)createContainer{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"newcontainer"];
// Create container in your Storage account if the container doesn't already exist
[blobContainer createContainerIfNotExistsWithCompletionHandler:^(NSError *error, BOOL exists) {
if (error){
NSLog(@"Error in creating container.");
}
}];
}
Anda dapat mengonfirmasi bahwa ini berfungsi dengan melihat Microsoft Azure Storage Explorer dan memastikan bahwa newcontainer ada dalam daftar kontainer untuk akun Storage Anda.
Atur Izin Kontainer
Izin kontainer secara default dikonfigurasi untuk akses Privat. Namun, kontainer menyediakan beberapa opsi berbeda untuk akses kontainer:
- Privat: Data kontainer dan blob hanya dapat dibaca oleh pemilik akun.
- Blob: Data blob dalam kontainer ini dapat dibaca melalui permintaan anonim, tetapi data kontainer tidak tersedia. Klien tidak dapat menghitung blob dalam kontainer melalui permintaan anonim.
- Kontainer: Data kontainer dan blob dapat dibaca melalui permintaan anonim. Klien dapat menghitung blob dalam kontainer berdasarkan permintaan anonim, tetapi tidak dapat menghitung kontainer dalam akun penyimpanan.
Contoh berikut menunjukkan kepada Anda cara membuat kontainer dengan izin akses Kontainer, yang akan mengizinkan akses publik dan baca-saja untuk semua pengguna di Internet:
-(void)createContainerWithPublicAccess{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
// Create container in your Storage account if the container doesn't already exist
[blobContainer createContainerIfNotExistsWithAccessType:AZSContainerPublicAccessTypeContainer requestOptions:nil operationContext:nil completionHandler:^(NSError *error, BOOL exists){
if (error){
NSLog(@"Error in creating container.");
}
}];
}
Unggah blob ke dalam kontainer
Seperti disebutkan di bagian konsep layanan Blob, Blob Storage menawarkan tiga jenis blob: blob blok, blob pelengkap, dan blob halaman. Pustaka iOS Azure Storage mendukung ketiga jenis blob. Dalam kebanyakan kasus, blob blok adalah jenis yang disarankan.
Contoh berikut menunjukkan cara mengunggah blob blok dari NSString. Jika blob dengan nama yang sama sudah ada dalam kontainer ini, isi blob ini akan ditimpa.
-(void)uploadBlobToContainer{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
[blobContainer createContainerIfNotExistsWithAccessType:AZSContainerPublicAccessTypeContainer requestOptions:nil operationContext:nil completionHandler:^(NSError *error, BOOL exists)
{
if (error){
NSLog(@"Error in creating container.");
}
else{
// Create a local blob object
AZSCloudBlockBlob *blockBlob = [blobContainer blockBlobReferenceFromName:@"sampleblob"];
// Upload blob to Storage
[blockBlob uploadFromText:@"This text will be uploaded to Blob Storage." completionHandler:^(NSError *error) {
if (error){
NSLog(@"Error in creating blob.");
}
}];
}
}];
}
Anda dapat mengonfirmasi bahwa ini berfungsi dengan melihat Microsoft Azure Storage Explorer dan memastikan bahwa kontainernya, containerpublic, berisi blob, sampleblob. Dalam sampel ini, kami menggunakan kontainer publik sehingga Anda juga dapat memastikan bahwa aplikasi ini bekerja dengan pergi ke URI blob:
https://nameofyourstorageaccount.blob.core.windows.net/containerpublic/sampleblob
Selain mengunggah blob blok dari NSString, metode serupa juga ada untuk NSData, NSInputStream, atau file lokal.
Cantumkan blob di kontainer
Contoh berikut menunjukkan cara mencantumkan semua blob dalam kontainer. Saat melakukan operasi ini, perhatikan parameter berikut:
- continuationToken - Token kelanjutan mewakili kapan operasi pencantuman harus dimulai. Jika tidak ada token yang disediakan, itu akan mencantumkan blob dari awal. Jumlah blob apa pun dapat dicantumkan, dari nol hingga maksimum yang ditetapkan. Bahkan jika metode ini mengembalikan hasil nol, jika
results.continuationTokentidak nihil, mungkin ada lebih banyak blob pada layanan yang belum terdaftar. - prefix - Anda dapat menentukan awalan yang digunakan untuk daftar blob. Hanya blob yang dimulai dengan awalan ini yang akan terdaftar.
- useFlatBlobListing - Seperti yang disebutkan di bagian Penamaan dan rujukan kontainer dan blob, meski layanan Blob adalah skema penyimpanan datar, Anda dapat membuat hierarki virtual dengan menamai blob dengan informasi jalur. Namun, pencantuman non-datar saat ini tidak didukung. Fitur ini akan segera hadir. Untuk sekarang, nilai ini harus YA.
- blobListingDetails - Anda dapat menentukan item mana yang akan disertakan saat mencantumkan blob
- AZSBlobListingDetailsNone: Hanya cantumkan blob yang diterapkan, dan jangan mengembalikan metadata blob.
- AZSBlobListingDetailsSnapshots: Cantumkan blob yang diterapkan dan snapshot blob.
- AZSBlobListingDetailsMetadata: Ambil metadata blob untuk setiap blob yang dikembalikan dalam daftar.
- AZSBlobListingDetailsUncommittedBlobs: Cantumkan blob yang diterapkan dan tidak.
- AZSBlobListingDetailsCopy: Sertakan properti salinan dalam daftar.
- AZSBlobListingDetailsAll: Cantumkan semua blob diterapkan yang tersedia, blob yang tidak diterapkan, dan snapshot, dan kembalikan semua status metadata dan salinan untuk blob tersebut.
- maxResults - Jumlah maksimum hasil yang akan dikembalikan untuk operasi ini. Gunakan -1 agar tidak menetapkan batas.
- completionHandler - Blok kode untuk dieksekusi dengan hasil operasi daftar.
Dalam contoh ini, metode pembantu digunakan untuk secara rekursif memanggil metode cantum blob setiap kali token kelanjutan dikembalikan.
-(void)listBlobsInContainer{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
//List all blobs in container
[self listBlobsInContainerHelper:blobContainer continuationToken:nil prefix:nil blobListingDetails:AZSBlobListingDetailsAll maxResults:-1 completionHandler:^(NSError *error) {
if (error != nil){
NSLog(@"Error in creating container.");
}
}];
}
//List blobs helper method
-(void)listBlobsInContainerHelper:(AZSCloudBlobContainer *)container continuationToken:(AZSContinuationToken *)continuationToken prefix:(NSString *)prefix blobListingDetails:(AZSBlobListingDetails)blobListingDetails maxResults:(NSUInteger)maxResults completionHandler:(void (^)(NSError *))completionHandler
{
[container listBlobsSegmentedWithContinuationToken:continuationToken prefix:prefix useFlatBlobListing:YES blobListingDetails:blobListingDetails maxResults:maxResults completionHandler:^(NSError *error, AZSBlobResultSegment *results) {
if (error)
{
completionHandler(error);
}
else
{
for (int i = 0; i < results.blobs.count; i++) {
NSLog(@"%@",[(AZSCloudBlockBlob *)results.blobs[i] blobName]);
}
if (results.continuationToken)
{
[self listBlobsInContainerHelper:container continuationToken:results.continuationToken prefix:prefix blobListingDetails:blobListingDetails maxResults:maxResults completionHandler:completionHandler];
}
else
{
completionHandler(nil);
}
}
}];
}
Unduh blob
Contoh berikut menunjukkan cara mengunduh blob ke objek NSString.
-(void)downloadBlobToString{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
// Create a local blob object
AZSCloudBlockBlob *blockBlob = [blobContainer blockBlobReferenceFromName:@"sampleblob"];
// Download blob
[blockBlob downloadToTextWithCompletionHandler:^(NSError *error, NSString *text) {
if (error) {
NSLog(@"Error in downloading blob");
}
else{
NSLog(@"%@",text);
}
}];
}
Hapus blob
Contoh berikut menunjukkan cara menghapus blob.
-(void)deleteBlob{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
// Create a local blob object
AZSCloudBlockBlob *blockBlob = [blobContainer blockBlobReferenceFromName:@"sampleblob1"];
// Delete blob
[blockBlob deleteWithCompletionHandler:^(NSError *error) {
if (error) {
NSLog(@"Error in deleting blob.");
}
}];
}
Hapus kontainer blob
Contoh berikut menunjukkan cara menghapus kontainer.
-(void)deleteContainer{
NSError *accountCreationError;
// Create a storage account object from a connection string.
AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here" error:&accountCreationError];
if(accountCreationError){
NSLog(@"Error in creating account.");
}
// Create a blob service client object.
AZSCloudBlobClient *blobClient = [account getBlobClient];
// Create a local container object.
AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:@"containerpublic"];
// Delete container
[blobContainer deleteContainerIfExistsWithCompletionHandler:^(NSError *error, BOOL success) {
if(error){
NSLog(@"Error in deleting container");
}
}];
}
Langkah berikutnya
Setelah Anda mempelajari cara menggunakan Blob Storage dari iOS, ikuti tautan ini untuk mempelajari selengkapnya tentang pustaka iOS dan layanan Storage.
- Pustaka Klien Azure Storage untuk iOS
- Dokumentasi Referensi iOS Azure Storage
- Azure Storage Services REST API
- Blog Tim Azure Storage
Jika Anda memiliki pertanyaan tentang pustaka ini, jangan ragu untuk mengirim postingan ke halaman Microsoft Q&A atau Stack Overflow kami. Jika Anda memiliki saran fitur untuk Azure Storage, silakan kirim ke Umpan Balik Azure Storage.