Merhaba Arkadaşlar,
Microsoft Yaz Okulu 2013 ışığında Azure konusunda sahip olduğum bilgileri elimden geldiğince paylaşmaya çalışmak istiyorum. Öncelikle Azure Storage nedir ? diye soracak olursak, Azure’da Storage Account denen hesaplar bulunmaktadır ve hesabınızda Container’lar bulunmaktadır. Container’lar Tablolara, Queuelara ve Blob’lara sahip olabilmektedir.
Biz blob’lar ile ilgileneceğiz yani dosyalarımızı Azure Storage’a yükleyeceğiz. Öncelikle şunu en başından bilelim: Blob Container’in içindeki her bir dosyaya verilen ad anlamına gelmektedir. Örnek verecek olursak yazokulu2013 adında bir kullanıcı adımız olsun, onun da altında Resimler denen bir Container’imiz olsun ve içerisinde blob denen bir sürü resimimiz olsun. Sanırım aradaki ilişkiyi daha iyi anlatabilmişimdir.Aşağıdaki örnek daha iyi açıklayacaktır:
Şimdi gelelim blob’larımıza nasıl ulaşacağız ve nasıl dosyalarımızı yükleyeceğiz sorusunun cevabına.
Ben Windows Phone projemde WCF aracılığıyla işlemlerimi gerçekleştirdiğim için bu yaklaşım üzerinden gideceğim. Tabiki Mobil Servisler aracılığı ile de Storage Account’a veri transferi yapılabilmektedir.
Web.Config Dosyamızı açalım ve Azure Storage’ın Access Key’ini Ekleyelim.
1 |
<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=hesapadiniz;AccountKey=accountkeyiniz" /> |
Böylelikle kod tarafında account key’imize kolaylıkla ulaşabileceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.Hosting; namespace ResimulatorWCF { public class AzureBlobber { CloudStorageAccount storageAccount; CloudBlobClient blobClient; CloudBlobContainer blobContainer; CloudBlockBlob blockBlob; public AzureBlobber() { //Storage Hesap Bilgilerini Al ve Parsing işlemini yap storageAccount =CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString")); //Client'i Oluştur blobClient = storageAccount.CreateCloudBlobClient(); //Container'a ulaşabilmek için referansa ulaşalım blobContainer = blobClient.GetContainerReference("resimulator"); //Container daha önce oluşturulmadıysa Oluştur blobContainer.CreateIfNotExists(); } public void PushImageToStorage(FileStream stream, string ImageName) { //Cloud Block Blob içerisine dosya atmak için referansı talep ediyoruz. blockBlob = blobContainer.GetBlockBlobReference(ImageName); blockBlob.UploadFromStream(stream); stream.Dispose(); } public byte[] GetImageFromStorage(string ImageName) { //Blob'u çekebilmek için referansı alırız. blockBlob = blobContainer.GetBlockBlobReference(ImageName); //Byte Array oluşturulur byte[] memory; //Stream'e veri yazılır ve Byte Array olarak istenen yere gönderilir using (MemoryStream MemoryStream_Image = new MemoryStream()) { blockBlob.DownloadToStream(MemoryStream_Image); memory = MemoryStream_Image.ToArray(); } return memory; } } } |
Dipnot: Ben azure key’ine sahip application dışında dosyaların kullanılmaması için bu şekilde bir yöntem kullandım. Yani linkler üzerinden erişim sağlanamayacaktır. Yalnızca byte olarak alınabilmektedir. Fakat bunun dışında şu yöntem kullanılabilir:
SAS(Shared Access Signature) kullanılır yani linklere belli bir süreliğine özel erişim sağlanır son kullanma tarihi belirlenir ve o tarih veya saatten sonra erişimler engellenir. Bu kullanım senaryosu fazlaca kullanılan yöntemlerden birtanesidir.
Diğer Yazılarımda Görüşmek Üzere 🙂
Başlıkda belirtilen içeriğe sahip değil , ilk bakışta konunun tamamen anlatımı gibi görülüyor , konu hakkında uygulama yapacak olanlara yardımcı olabileceğini sanmıyorum.
Merhabalar,
Yorumunuz için teşekkür ederim. Sizlerden alacağım feedbackler sayesinde daha uygun yazılar yazmaya çalışacağım. Bu şekilde anlatmaya çalıştım fakat aklınıza takılan bir soru varsa buradan sorabilirsiniz,
Elimden geldiğince yardımcı olmaya çalışırım.
Faydalı bir yazı. Fakat şöyle bir probleme cevap verebiliyor mu? Mesela biz kullanıcıya yükleme işleminin %’sini de göstermek istesek bu uygulamayı ne şekilde değiştirmemiz gerekir? Yani anladığım kadarı ile bu uygulama dosyayı (resimi) direkt olarak gönderiyor ve kullanıcı ne kadarının gittiğini göremiyor. Göstermek için nasıl bir yol izlenebilir?
Merhaba,
Buna aslında şu şekilde çözüm getirebiliriz. Windows Phone gibi bir cihaza yazılım yazıyorsanız malesef ki Azure Storage Referanslarını ne yazık ki direk olarak ekleyemiyorsunuz. Ancak Azure REST api lerini kullanarak bu işlemleri gerçekleştirebiliyorsunuz. Yani araya bir servis koymak en kolay yol aslında. Onunda çözümü şu: Veriyi belirli bir bayt grubuna bölmek ve bu şekilde yollamak, her geçen bayt sayısını yüzdelik olarak göstermek. Umarım anlatabilmişimdir. Eğer kafanızda soru işaretleri olursa daha ayrıntılı ve örnekli olarak bir makale yazabilirim.
İyi Çalışmalar dilerim.