Benutzer mit den meisten Antworten
Google Drive: Kopieren einer Datei in ein UNTERORDNER auf dem Drive mit Visual Basic

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
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
- Bearbeitet Gneufzen Donnerstag, 12. Dezember 2019 14:55
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Dezember 2019 06:37
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 24. Dezember 2019 08:05
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 FolderGruß,
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.
-
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.
-
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.
-
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
- Bearbeitet Gneufzen Donnerstag, 12. Dezember 2019 14:55
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Dezember 2019 06:37
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 24. Dezember 2019 08:05