none
Google Drive: Kopieren einer Datei in ein UNTERORDNER auf dem Drive mit Visual Basic RRS feed

  • Frage

  • Hallo Zusammen,
    ich möchte gerne eine Datei in einen Ordner bzw. Unterordner in GoogleDrive kopieren.
    Ich programmiere in VB 2019.
    Ich habe sehr viele Seiten besucht jedoch wird überall nur das kopieren in das GoogleDrive Root geschrieben.
    Weder in einen Ordner geschweige denn in einem Unterordner.

    Was ich bissher geschaft habe:
    Ordner in GoogleDrive erstellen
    Unterordner in GoogleDrive erstellen
    Datei ins Root von GoogleDrive kopieren.

    Was ich nicht schaffe:
    Datei in einen Unterordner kopieren.
    Eigentlich möchte ich einen Ordner mit allen Unterordnern über VB nach GoogleDrive kopieren als eine Art Backup.

    Mein bisheriger Code:

        Private Sub UploadFile_create(FilePath As String)
    
            ' Checking if the Service is still alive, if not create the service again.
            If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService()
    
            Dim findrootid = New Google.Apis.Drive.v3.Data.File() With {
            .Name = "Testordner",
            .MimeType = "application/vnd.google-apps.folder"
        }
            Dim findrequest As Google.Apis.Drive.v3.FilesResource.ListRequest = moService3.Files.List
    
            Dim list1 As Google.Apis.Drive.v3.Data.FileList = findrequest.Execute()
    
    
            Dim FolderID = Nothing
    
            For Each item As Google.Apis.Drive.v3.Data.File In list1.Files
                If item.MimeType = "application/vnd.google-apps.folder" Then
                    If item.Name = "Testordner" Then
                        FolderID = item.Id
                        Exit For
                    End If
                End If
            Next
    
            Dim oGDriveFile As New Google.Apis.Drive.v3.Data.File With {
            .OriginalFilename = System.IO.Path.GetFileName(FilePath),
            .Name = .OriginalFilename,
            .Description = "Google Drive Backup",
            .MimeType = GetMimeType(FilePath)}
            oGDriveFile.Id = New List(Of ParentReference)() From {New ParentReference() With {.Id = FolderID}}.ToString
    
            Dim bArrByteArray As Byte() = System.IO.File.ReadAllBytes(FilePath) ' Your File Path from where you would want to upload from.
            Dim oStream As New System.IO.MemoryStream(bArrByteArray)
    
            Dim oUploadRequest_create As Google.Apis.Drive.v3.FilesResource.CreateMediaUpload
            oUploadRequest_create = moService3.Files.Create(oGDriveFile, oStream, oGDriveFile.MimeType)
            oUploadRequest_create.Fields = FolderID
            oUploadRequest_create.Alt = Google.Apis.Drive.v3.FilesResource.CreateMediaUpload.AltEnum.Json
            oUploadRequest_create.Upload()
    
            MsgBox("Create abgeschlossen!")
        End Sub
    Donnerstag, 5. Dezember 2019 14:29

Antworten

  • Na Klar.

    Eine Datei in einen Unterordner von Google Drive kopieren.

    Private Sub Datei_in_Unterordner(FilePath As String) ' Checking if the Service is still alive, if not create the service again. If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService() Dim oGDriveFile As New Google.Apis.Drive.v2.Data.File With { .OriginalFilename = System.IO.Path.GetFileName(FilePath), .Title = .OriginalFilename, .Description = "Google Drive Backup", .MimeType = GetMimeType(FilePath), .Parents = New List(Of ParentReference)() From {New ParentReference() With {.Id = Get_folderID("Erster Unterordner")}}} Dim bArrByteArray As Byte() = System.IO.File.ReadAllBytes(FilePath) ' Your File Path from where you would want to upload from. Dim oStream As New System.IO.MemoryStream(bArrByteArray) Dim oUploadRequest_insert As Google.Apis.Drive.v2.FilesResource.InsertMediaUpload oUploadRequest_insert = moService2.Files.Insert(oGDriveFile, oStream, oGDriveFile.MimeType) oUploadRequest_insert.Fields = "id" oUploadRequest_insert.Alt = Google.Apis.Drive.v2.FilesResource.InsertMediaUpload.AltEnum.Json oUploadRequest_insert.Upload() MsgBox("Insert abgeschlossen!") End Sub

     Public Function Get_folderID(ByVal Ordnername As String) As String
    
            If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService()
            Dim findrequest As Google.Apis.Drive.v3.FilesResource.ListRequest = moService3.Files.List
            Dim list1 As Google.Apis.Drive.v3.Data.FileList = findrequest.Execute()
            Dim FolderID As String = ""
    
            For Each Folders As Google.Apis.Drive.v3.Data.File In list1.Files
                If Folders.MimeType = "application/vnd.google-apps.folder" Then
                    If Folders.Name = Ordnername Then
                        FolderID = Folders.Id
                        Exit For
                    End If
                End If
            Next
            Return FolderID
        End Function

    Der Interessante Teil an dem ich lange hing war die .Parent Property, der Info die besagt in welchem Unterordner die Datei reinkopiert werden soll. Insbesondere die Übergabe der OrdnerID. Aber mit dieser Lösung geht es wunderbar.

    Als kleiner Obulus noch ein Schnipsel hinterher.
    Das Erstellen eines Unterordners in einen vorhandenen Ordner in Google Drive.

    Private Sub Unterordner_erstellen_btn_Click(sender As Object, e As EventArgs) Handles unterordner_erstellen_btn.Click If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService() Dim subfolder = New Google.Apis.Drive.v2.Data.File() Dim folderID As String = "" folderID = Get_folderID("Erster Unterordner") ' ist der Ordner in dem der Unterordner reinkopiert werden soll überhaupt vorhanden? If folderID = "" Then MsgBox("Übergeordneter Ordner nicht vorhanden. Bitte erstellen.") Exit Sub End If If CheckForDuplicateFolder(folderID, "Zweiter Unterordner") = False Then subfolder.Title = "Zweiter Unterordner" subfolder.MimeType = "application/vnd.google-apps.folder" subfolder.Parents = New List(Of ParentReference)() From {New ParentReference() With {.Id = folderID}} Dim res = moService2.Files.Insert(subfolder) res.Fields = "id" Dim fil = res.Execute() MsgBox("Ordner Unterordner erstellen abgeschlossen!") Else MsgBox("Unterordner schon vorhanden!") End If End Sub

     Public Function CheckForDuplicateFolder(ByVal FolderID As String, ByVal NewFolderNameToCheck As String) As Boolean
            Dim ResultToReturn As Boolean = False
            Try
                Dim request = moService2.Files.List()
                Dim requeststring As String = ("'" & FolderID & "' in parents And mimeType='application/vnd.google-apps.folder' And trashed=false")
                request.Q = requeststring
                Dim FileList = request.Execute()
                For Each File_tmp In FileList.Items
    
                    If File_tmp.Title = NewFolderNameToCheck Then
                        ResultToReturn = True
                    End If
                Next
            Catch EX As Exception
                MsgBox("THERE HAS BEEN AN ERROR" & EX.Message)
            End Try
            Return ResultToReturn
        End Function
     Public Shared Function GetMimeType(fileName As String) As String
            Dim mimeType As String = "application/unknown"
            Dim ext As String = System.IO.Path.GetExtension(fileName).ToLower()
            Dim regKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext)
            If regKey IsNot Nothing AndAlso regKey.GetValue("Content Type") IsNot Nothing Then
                mimeType = regKey.GetValue("Content Type").ToString()
            End If
            Return mimeType
        End Function




    viel Spass

    Andreas





    Donnerstag, 12. Dezember 2019 14:39

Alle Antworten

  • Hallo Gneufzen,

    Das Hinzufügen einer Datei zu einem Unterordner des übergeordneten Ordners in der Google Drive-API ist erfolgreich, wenn die List-Methode für den folderId-Parameter in Kombination mit der get-Methode für den fileID-Parameter verwendet wird. Dies kann durch den Code erreicht werden, der in diesem Artikel bereitgestellt wird:
    Google Drive API VB.NET Parent Folder of a Folder

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 6. Dezember 2019 13:16
    Administrator
  • Vielen Dank für die schnelle Antwort.

    Diesen Code hatte ich auch gefunden aber leider habe ich keine infos welchen Import ich nehmen soll.

    Bei mir kommen diese Fehler:

    Dim request As ParentsResource.ListRequest = Service.Parents.List(folderId)
    Fehler    BC30451    '"Service" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich.  

    Ich kämpfe immer mit der Syntax ;-)

    Könnten Sie mir ein Beispiel zeigen für eine Datei in einen Unterordner "

    Testordner

    ".

    Ich würde mich sehr freuen.

    Montag, 9. Dezember 2019 13:55
  • Hallo Zusammen,
    ich habe es nun geschaft eine Datei gezielt in einen Unterordner zu kopieren.
    Wer die Lösung haben möchte einfach schreiben.

    Mittwoch, 11. Dezember 2019 11:22
  • Hallo Gneufzen,

    Würdest Du die gefundene Lösung veröffentlichen, da sie jetzt verfügbar ist?

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 12. Dezember 2019 11:28
    Administrator
  • Na Klar.

    Eine Datei in einen Unterordner von Google Drive kopieren.

    Private Sub Datei_in_Unterordner(FilePath As String) ' Checking if the Service is still alive, if not create the service again. If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService() Dim oGDriveFile As New Google.Apis.Drive.v2.Data.File With { .OriginalFilename = System.IO.Path.GetFileName(FilePath), .Title = .OriginalFilename, .Description = "Google Drive Backup", .MimeType = GetMimeType(FilePath), .Parents = New List(Of ParentReference)() From {New ParentReference() With {.Id = Get_folderID("Erster Unterordner")}}} Dim bArrByteArray As Byte() = System.IO.File.ReadAllBytes(FilePath) ' Your File Path from where you would want to upload from. Dim oStream As New System.IO.MemoryStream(bArrByteArray) Dim oUploadRequest_insert As Google.Apis.Drive.v2.FilesResource.InsertMediaUpload oUploadRequest_insert = moService2.Files.Insert(oGDriveFile, oStream, oGDriveFile.MimeType) oUploadRequest_insert.Fields = "id" oUploadRequest_insert.Alt = Google.Apis.Drive.v2.FilesResource.InsertMediaUpload.AltEnum.Json oUploadRequest_insert.Upload() MsgBox("Insert abgeschlossen!") End Sub

     Public Function Get_folderID(ByVal Ordnername As String) As String
    
            If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService()
            Dim findrequest As Google.Apis.Drive.v3.FilesResource.ListRequest = moService3.Files.List
            Dim list1 As Google.Apis.Drive.v3.Data.FileList = findrequest.Execute()
            Dim FolderID As String = ""
    
            For Each Folders As Google.Apis.Drive.v3.Data.File In list1.Files
                If Folders.MimeType = "application/vnd.google-apps.folder" Then
                    If Folders.Name = Ordnername Then
                        FolderID = Folders.Id
                        Exit For
                    End If
                End If
            Next
            Return FolderID
        End Function

    Der Interessante Teil an dem ich lange hing war die .Parent Property, der Info die besagt in welchem Unterordner die Datei reinkopiert werden soll. Insbesondere die Übergabe der OrdnerID. Aber mit dieser Lösung geht es wunderbar.

    Als kleiner Obulus noch ein Schnipsel hinterher.
    Das Erstellen eines Unterordners in einen vorhandenen Ordner in Google Drive.

    Private Sub Unterordner_erstellen_btn_Click(sender As Object, e As EventArgs) Handles unterordner_erstellen_btn.Click If moService2.ApplicationName <> "GoogleCloud-Backup" Then CreateService() Dim subfolder = New Google.Apis.Drive.v2.Data.File() Dim folderID As String = "" folderID = Get_folderID("Erster Unterordner") ' ist der Ordner in dem der Unterordner reinkopiert werden soll überhaupt vorhanden? If folderID = "" Then MsgBox("Übergeordneter Ordner nicht vorhanden. Bitte erstellen.") Exit Sub End If If CheckForDuplicateFolder(folderID, "Zweiter Unterordner") = False Then subfolder.Title = "Zweiter Unterordner" subfolder.MimeType = "application/vnd.google-apps.folder" subfolder.Parents = New List(Of ParentReference)() From {New ParentReference() With {.Id = folderID}} Dim res = moService2.Files.Insert(subfolder) res.Fields = "id" Dim fil = res.Execute() MsgBox("Ordner Unterordner erstellen abgeschlossen!") Else MsgBox("Unterordner schon vorhanden!") End If End Sub

     Public Function CheckForDuplicateFolder(ByVal FolderID As String, ByVal NewFolderNameToCheck As String) As Boolean
            Dim ResultToReturn As Boolean = False
            Try
                Dim request = moService2.Files.List()
                Dim requeststring As String = ("'" & FolderID & "' in parents And mimeType='application/vnd.google-apps.folder' And trashed=false")
                request.Q = requeststring
                Dim FileList = request.Execute()
                For Each File_tmp In FileList.Items
    
                    If File_tmp.Title = NewFolderNameToCheck Then
                        ResultToReturn = True
                    End If
                Next
            Catch EX As Exception
                MsgBox("THERE HAS BEEN AN ERROR" & EX.Message)
            End Try
            Return ResultToReturn
        End Function
     Public Shared Function GetMimeType(fileName As String) As String
            Dim mimeType As String = "application/unknown"
            Dim ext As String = System.IO.Path.GetExtension(fileName).ToLower()
            Dim regKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext)
            If regKey IsNot Nothing AndAlso regKey.GetValue("Content Type") IsNot Nothing Then
                mimeType = regKey.GetValue("Content Type").ToString()
            End If
            Return mimeType
        End Function




    viel Spass

    Andreas





    Donnerstag, 12. Dezember 2019 14:39