Search code examples
.netvb.netgoogle-drive-apiservice-accountsgoogle-api-dotnet-client

Visual basic Dot Net


I don't hit any error with below code but the file is not uploaded into google drive. Anything that i've missed? Please help.

NOTE: cred.json is the file generated from google developer console.

Dim Service As New DriveService

Dim cred As Google.Apis.Auth.OAuth2.GoogleCredential

Dim UploadRequest As FilesResource.CreateMediaUpload

Dim body As New Data.File()

cred = GoogleCredential.FromFile("D:\cred.json")
      
cred.CreateScoped(DriveService.Scope.Drive)

Service = New DriveService(New BaseClientService.Initializer() With {.HttpClientInitializer = cred})

body.Name = IO.Path.GetFileName("D:\Test.txt")

body.MimeType = "text/plain"

 Using Stream = New FileStream("D:\Test.txt", FileMode.Open)

         UploadRequest = Service.Files.Create(body, Stream, body.MimeType)

         UploadRequest.SupportsAllDrives = True

         UploadRequest.Upload()
End Using
  

Solution

  • Its been a while since I have used vb .net sorry it took so long. This example should show you how to properly load the service account key file and upload your file to a directory of your choice.

    Just remember to share the folder with the service account email address. If you open the json key file its the only variable that has an @ in it.

    Imports System
    Imports Google.Apis.Auth.OAuth2
    Imports Google.Apis.Drive.v3
    Imports Google.Apis.Drive.v3.Data
    Imports Google.Apis.Services
    Imports Google.Apis.Upload
    
    Module Program
         Sub Main(args As String())
            Console.WriteLine("Hello World!")
            
            REM path to your service account key file. 
            Const  pathToServiceAccountKeyFile = "C:\Development\FreeLance\GoogleSamples\Credentials\ServiceAccountCred.json"
    
            REM load the service account credentials and use drive scope 
            Dim credential = GoogleCredential.FromFile(pathToServiceAccountKeyFile).CreateScoped(DriveService.Scope.Drive)
             
            Rem Create the drive service 
            Dim service = new DriveService(new BaseClientService.Initializer() with { 
                                              .HttpClientInitializer = credential
                                              })
             Task.Run(Async Function()
                 Await UploadFileAsync(service)
             End Function).GetAwaiter().GetResult()
            
        End Sub
         
         Private Async Function UploadFileAsync(service As DriveService) As Task(Of Boolean)
            
             Const FilePath As String = "C:\Development\FreeLance\GoogleSamples\Data\dummy.txt"
             
             Dim plist As List(Of String) = New List(Of String)
    
             REM Folder id to upload the file To
             Const idFolderSave = "0B5pJkOVaKccEYm5pVTJCWGFJbGM"
            
             plist.Add(idFolderSave) 'Set parent folder
    
             If (System.IO.File.Exists(FilePath)) Then
                 Dim fileMetadata = New File() With {
                         .Name = "Test",
                         .MimeType = "text/plain",
                         .Parents = plist
                         }
    
                 Dim request As FilesResource.CreateMediaUpload
    
                 Using stream = New System.IO.FileStream(FilePath, System.IO.FileMode.Open)
                     request = service.Files.Create(fileMetadata, stream, "text/plain")
                     request.Fields = "id, parents"
                     dim results = await request.UploadAsync()
                     
                     If (results.Status = UploadStatus.Failed)
                         Console.WriteLine("failed")
                         Console.WriteLine(results.Exception)
                         
                     else
                        Dim file As File = request.ResponseBody
                        Console.WriteLine("File upload: " + file.Id)
                     End If
                         
                 End Using
    
                
             Else
                 Console.WriteLine("File does not exist: " + FilePath)
             End If
         End Function
       
    End Module
    

    I will make sure to document this some where i dont think we currently have any visual basic samples any where for the library.