0

i am running this code:

    private static string[] Scopes = { DriveService.Scope.DriveReadonly };
    private static string ApplicationName = "Drive API .NET Quickstart";
    private static string _folderId = "0B3s20ZXnD-M7dkdhZzZaeXZRTWc";
    private static string _fileName = "testFile";
    private static string _filePath = @"C:\Users\Yosi\Desktop\bla bla.rar";
    private static string _contentType = "application/zip";

    static void Main(string[] args)
    {
        Console.WriteLine("create cred");
        UserCredential credential = GetUserCredential();

        Console.WriteLine("Get Services");
        DriveService service = GetDriveService(credential);

        Console.WriteLine("Upload File");
        UploadFileToDrive(service, _fileName, _filePath, _contentType);

    }


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

            return GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user1",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
        }
    }

    private static DriveService GetDriveService(UserCredential credential)
    {
        return new DriveService(
            new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
    }

    private static string UploadFileToDrive (DriveService service, string fileName, string filePath, string conentType)
    {
        var fileMatadata = new Google.Apis.Drive.v3.Data.File();
        fileMatadata.Name = fileName;
        fileMatadata.Parents = new List<string> { _folderId };

        FilesResource.CreateMediaUpload request;

        using (var stream = new FileStream(filePath, FileMode.Open))
        {
            request = service.Files.Create(fileMatadata, stream, conentType);
            request.Upload();
        }

        var file = request.ResponseBody;

        return file.Id;


    }
}

and get the following exception:

enter image description here

when I am calling the function: GetUserCredential();

Any ideas what can cause the error?

I actually copy the code from a video word by word and i can't see any logical reason for that error. The video I used : https://www.youtube.com/watch?v=nhQPwrrJ9kI&t=259s

msanford
  • 11,803
  • 11
  • 66
  • 93
  • 1
    Possible duplicate of [What is a NullReferenceException, and how do I fix it?](https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Ofir Winegarten Aug 28 '17 at 13:52
  • did you check `GoogleWebAuthorizationBroker` is not null? – Minh Bui Aug 28 '17 at 13:58

2 Answers2

2

This is failing:

GoogleClientSecrets.Load(stream).Secrets

You can generate the file using the following instructions if you don't have it: https://github.com/jay0lee/GAM/wiki/CreatingClientSecretsFile

Make sure the file client_secret.json exists in your application folder (where the exe is) and then:

using (var stream = new FileStream(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
            "client_secret.json"), FileMode.OpenOrCreate, FileAccess.Read))

Of course, don't include this file when deploying the application, each user must have and copy their own file to the application folder.

Isma
  • 14,604
  • 5
  • 37
  • 51
1

Please check carefully this link below how to get User Credential.

OAuth 2.0 - Credentials

this is code example:

   private async Task Run()
    {   
        UserCredential credential;
        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { BooksService.Scope.Books },
                "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
        }

        // Create the service.
        var service = new BooksService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });

        var bookshelves = await service.Mylibrary.Bookshelves.List().ExecuteAsync();
        ...
    }
Minh Bui
  • 1,032
  • 8
  • 18