Merhabalar. Bugün ki yazımda hemen hemen her büyük projede olan bir konudan bahsedeceğiz. Uygulamarımızda fotoğraf yüklemek veya fotoğraf seçtikten sonra bunun online olarak diğer kullanıcılarla etkileşim içinde olmasını istiyorsak bir sunucu ya da veri tabanı içerisinde saklamamız gerekmekte. Bunun ise API kullanarak yapabiliriz. Bu yazımda bunları gerçekleştireceğiz.
İlk olarak bir web servis yazmamız gerekiyor. Bunun için ben bir ASP.NET MVC projesi oluşturacağım. Burada dikkat etmemiz gerek şey; projeyi oluştururken karşımıza çıkan seçeneklerden Web API seçeneğinin seçili olması gerektiğini unutmayın. Sonrasında projeyi oluşturun. aslında yapacağımız işlem çok basit. Bir kaç satır kod yazacağız. Açılan projemizde Controllers klasörünün üstüne gelerek bir sınıf oluşturmamız gerekiyor. Bu sınıfın ismini UploadController koyalım. Siz istediğiniz gibi değiştirebilirsiniz. Bu sınıf ApiController sınıfından kalıtım almalı. Sonrasında bir yönlendirme yapmalıyız. Bu yönlendirme ile alan adımızın sonuna eklenecek olan kısımdır. Örnek vermek gerekirse alan adım sezeromer.com olsun. Burada bir yönlendirme yaparsam sezeromer.com/api/Files/Upload olacak. Bu adresi girdiğim zaman ise bu sınıfta ki fonksiyon çalışacak. Sonrasında ise kodlarımı yazıyorum. Burada dikkat etmemiz gereken diğer konu ise fotoğraflarımızı veya videolarımızı nereye kaydedecek oluşumuzdur. Ben burada uploads klasörü olarak belirttim. Bu yüzden projeme birde uploads adında bir klasör ekliyorum.
public class UploadController : ApiController { [Route("api/Files/Upload")] public async Task<string> Post() { try { var httpRequest = HttpContext.Current.Request; if (httpRequest.Files.Count>0) { foreach (string file in httpRequest.Files) { var postedFile = httpRequest.Files[file]; var fileName = postedFile.FileName.Split('\\').LastOrDefault().Split('/').LastOrDefault(); var filePath = HttpContext.Current.Server.MapPath("~/Uploads/" + fileName); postedFile.SaveAs(filePath); return "/Uploads/" + fileName; } } } catch (Exception hata) { return hata.Message; } return "Dosya Yok"; }
Aslında servisimiz bu kadar kolay. Bu servisi isterseniz Azure’da barındırabilirsiniz veya yerelde de kullanabilirsiniz. Bundan sonrası Xamarin tarafında. Ben Xamarin.Forms projemde fotoğraf seçmek veya çekmek için Xaml.Media.Plugin eklentisini kullanıyorum. Siz dilediğinizi kullanabilirsiniz ama MediaFile türünde olması şartıyla.
Web servisimize veri yollamak için bir content oluşturmamız gerekiyor. Content’i oluşturduktan sonra içine fotoğrafımızı ve fotoğrafımızın yolunu koyuyoruz. Bu içeriği adrese göndermek için bir Client oluşturmamız gerekiyor. Client oluşturduktan sonra adres belirtmemiz gerekiyor. Hangi adres olacağını belirtmemiz gerekiyor. Yukarıda da belirtmiştim adresinizi yazdıktan sonra yönlendirme yaptıysanız yönlendirme adresinizi de yazmak zorundasınız. En son işlem olarak oluşturduğumuz içeriği, belirttiğimiz adrese oluşturduğumuz client ile gönderiyoruz. İşlemlerimiz bu kadar.
var content = new MultipartFormDataContent(); content.Add(new StreamContent(_mediFile.GetStream()), "\"file\"", $"\"{_mediFile.Path}\""); var httpClient = new HttpClient(); var uploadServicBaseAdress = Constants.UploadBaseAddress; var httpResponseMessage = await httpClient.PostAsync(uploadServicBaseAdress, content);
Eğer bir sorun ile karşılaşırsanız yorum veya mail atarak ulaşabilirsiniz.
Comments (3)
venkateshsays:
Perşembe Mayıs 9th, 2019 at 10:47how to do it xamarin forms c#. i use it in my project but the request is succeed and the file doesn’t stored in server. And where i find the api controller.
Tonysays:
Salı Temmuz 9th, 2019 at 16:09Hi, when i run program error, can you send me your project perfect. Thanks you very much
Shailesh Kumar Raisays:
Salı Ağustos 11th, 2020 at 11:24content.Add(new StreamContent(_mediFile.GetStream()),
“\”file\””,
$”\”{_mediFile.Path}\””); what is file means