Uygulamalarımızda Google Drive Api özelliklerini kullanalım.

Google Drive gittiğiniz her yere sunumlarınızı, raporlarınızı, dökümanlarınızı ve resimlerinizi götürmenizi sağlayan bir online depolama servisidir. Bu servis başlangıç seviyesinde 15gb a kadar alanı ücretsiz olarak kullanabilirsiniz. Google drive ı kullanabilmeniz için bir gmail hesabına ihtiyacınız bulunuyor. Bizler bu yazımızda google drive da oluşturduğumuz alanı google api lerini kullanarak uygulamalarımız ile nasıl entegre edebileceğimizi göreceğiz.

Google Drive ı uygulamalarımızda kullanabilmemiz için öncelikle Google Api Console dan Drive Api özelliğini aktive etmemiz gerekmektedir. Bu özelliği aktive edebilmek için aşağıdaki adımları izleyebilirsiniz. 

  1. Adım Drive API sini aktive etme. 

    • Hizmeti aktive edebilmek için sihirbazı kullanarak yeni bir proje oluşturabilir veya varolan bir projenizi seçerek Devam (Continue) tuşuna basıp gelen ekranda Kimlik bilgilerine git (Go to credentials) butonuna basınız.
    • Projenize kimlik bilgisi ekleyin sayfasında iptal butonuna basın. 
    • Ekranın üst kısmındaki OAuth izin ekranı (OAuth consent screen) nı seçin. E-Posta adresi ve bu api yi kullanacağınız projenizin adını girip Kaydet butonuna basın.
    • Kimlik bilgileri (Credentials) sekmesine geçip Kimlik bilgilerini oluştur (Create credentials) butonuna tıklayın ve OAuth istemci kimliği (OAuth client ID) seçin.
    • Gelen ekranda oluşturacağımız uygulama türlerinden Diğer (Other) seçeneğini seçip bir isim belirledikten sonra Oluştur (Create) butonuna tıklayın.
    • Tamam butonuna tıklayarak gelen diyalog penceresini kapatın. 
    • Oluşturduğumuz OAuth istemci kimliğini bilgisayarımıza download edelim
    • Json formatında indirdiğimiz dosyanın adını client_secret.json olarak değiştirelim. 
  2. Projemizi oluşturalım. 

    • Visual Studio içerisinde C# programlama dili ile bir Console uygulaması oluşturalım. 
    • Nuget Package Manager Console kısmından Google.Apis.Drive.v3 package ini uygulamamıza install edelim.
      PM> Install-Package Google.Apis.Drive.v3
    • Json olarak indirdiğimiz client_secret.json dosyasını Visual Studio da oluşturduğumuz projemizin içerisine kopyalayalım. 
    • client_secret.json dosyasını seçip Properties penceresinden Copy to Output Directory kısmından Copy always özelliğini seçelim. 

Visual Studio da oluşturduğumuz consol uygulamasının Program.cs class ında kullanacağımız kütüphaneleri ekleyelim. 

using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

Uygulamamız aşağıdaki fonksiyonlardan oluşacak. 

  • GetMenu : Uygulamada farklı işlemleri yapabileceğimiz bir menü ekranı.
  • Login: Google OAuth2 ile login olacağımız bir fonksiyon. 
  • CreateDirectory : Google Drive da klasör oluşturabileceğimiz fonksiyon. 
  • GetFiles : Google Drive daki dosyalarımızın listesini alabileceğimiz fonksiyon. 
  • UploadFiles: Bilgisayarımızdaki bir dosyayı upload edebileceğimiz fonksiyon. 
  • DeleteFile : Google Drive daki bir dosyayı silebileceğimiz fonksiyon. 

GetMenu: 

public static int GetMenu()
{
    Console.Clear();
    Console.WriteLine("----------------------------------------");
    Console.WriteLine("Dosya İşlemleri.");
    Console.WriteLine("0. Login. ");
    Console.WriteLine("1. Klasör Oluştur. ");
    Console.WriteLine("2. Dosya Listesi.");
    Console.WriteLine("3. Dosya Yükle. ");
    Console.WriteLine("4. Dosya Sil");
    Console.WriteLine("9. Çıkış. ");
    Console.WriteLine("----------------------------------------");
    Char vKey = new char();
    int inputKey = 0;
    bool isValidKey = false;
    do
    {
        vKey = Console.ReadKey().KeyChar;
        isValidKey = int.TryParse(vKey.ToString(), out inputKey);
    } while (!isValidKey);
    return inputKey;
}

Login:

static bool Login()
{
    UserCredential credential;

    using (var stream =
        new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.Personal);
        credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore("Drive.Auth.Store")).Result;
        Console.WriteLine("Kaydedildi.: " + credPath);
    }

    // Create Drive API service.
    service = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return true; 
}

CreateDirectory: 

static bool CreateDirectory()
{
    Console.Clear();
    Console.WriteLine("Klasör Adı Giriniz : ");
    string DirectoryName = Console.ReadLine();
    var body = new Google.Apis.Drive.v3.Data.File();
    body.Name = DirectoryName;
    body.MimeType = "application/vnd.google-apps.folder";
    try
    {
        var request = service.Files.Create(body);
        request.Fields = "id";
        var _FF = request.Execute();
    }
    catch (Exception e)
    {
        Console.WriteLine("Hata Oluştu. : " + e.Message);
    }
    return true;
}

GetFiles:

static void GetFiles()
{ 
            
    // Define parameters of request.
    FilesResource.ListRequest listRequest = service.Files.List();
    listRequest.PageSize = 10;
    listRequest.Fields = "nextPageToken, files(id, name)";

    // List files.
    IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
        .Files;
    Console.Clear();
    Console.WriteLine("Dosyalar:");
    if (files != null && files.Count > 0)
    {
        foreach (var file in files)
        {
            Console.WriteLine("{0} ({1}) - {2}", file.Name, file.Id);
        }
    }
    else
    {
        Console.WriteLine("Dosya bulunamadı.");
    }
    Console.ReadKey();
}

UploadFiles:

static bool UploadFiles()
{
    Console.Clear();
    Console.WriteLine("Yüklenecek Dosyanın path ini ve adını yazınız.");
    string FullFileName = Console.ReadLine();
    Console.WriteLine("Yüklenecek Dosyanın adını yazınız.");
    string FileName = Console.ReadLine();
    if (System.IO.File.Exists(FullFileName))
    {
        var fileMetaData = new Google.Apis.Drive.v3.Data.File();
        fileMetaData.Name = FileName;
        Google.Apis.Drive.v3.FilesResource.CreateMediaUpload request;
        using (var stream = new System.IO.FileStream(FullFileName, FileMode.Open))
        {
            request = service.Files.Create(fileMetaData, stream, "image/jpeg");
            request.Fields = "id";
            request.Upload();
            var fileId = request.ResponseBody;
        }
    }
    return true;
}

DeleteFile:

static void DeleteFiles()
{
    Console.Clear();
    Console.WriteLine("Silmek istediğiniz dosyanın Id sini yazınız.");
    string fileId = Console.ReadLine();
    FilesResource.DeleteRequest deleteRequest = service.Files.Delete(fileId);
    deleteRequest.Execute();
}

Program.cs Main Fonksiyonu: 

static string[] Scopes = new[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile };
static string ApplicationName = "OAuthWebFilePermission"; // Olusturulan Uygulama Adı
static DriveService service;
static void Main(string[] args)
{
    int vKey = 0;
    Login();
    do
    {
        vKey = GetMenu();
        switch (vKey)
        {
            case 0:
                Login();
                break;
            case 1:
                CreateDirectory();
                break;
            case 2:
                GetFiles();
                break;
            case 3:
                UploadFiles();
                break;
            case 4:
                DeleteFiles();
                break;
            default:
                break;
        }

    } while (vKey != 9);
}

 

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder