using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; 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.IO; using Google.Apis.Upload; using System.Threading.Tasks; using System.Threading; public class GoogleDriveUtils { static string[] Scopes = { DriveService.Scope.Drive }; // or DriveService.Scope.Drive for full access static string ApplicationName = "MyDriveUploader"; public static DriveService service; public static void setupService() { UserCredential credential; using (var stream = new FileStream("../Material/client_secret_30989913678-hk8sipecu98lp5vdsk0ictf5gufmn33p.apps.googleusercontent.com.json", FileMode.Open, FileAccess.Read)) { // credential = GoogleCredential.FromStream(stream) // .CreateScoped(Scopes); string credPath = "../Material/token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.FromStream(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; } service = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); } public static string getFolder(DriveService service, string path, string parentFolderId) { Debug.Log("Getting/Creating folder path: " + path); List folders = new List(path.Split('/')); string currentFolderId = parentFolderId; foreach (string folder in folders) { var request = service.Files.List(); request.Q = $"mimeType='application/vnd.google-apps.folder' and name='{folder}' and '{currentFolderId}' in parents and trashed=false"; request.Fields = "files(id, name)"; request.SupportsAllDrives = true; request.IncludeItemsFromAllDrives = true; var result = request.Execute(); if (result.Files.Count > 0) { currentFolderId = result.Files[0].Id; Debug.Log("Found folder: " + folder + " with ID: " + currentFolderId); } else { // Folder does not exist, create it var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = folder, MimeType = "application/vnd.google-apps.folder", Parents = new List { currentFolderId } }; var createRequest = service.Files.Create(fileMetadata); createRequest.Fields = "id"; createRequest.SupportsAllDrives = true; var file = createRequest.Execute(); currentFolderId = file.Id; } } return currentFolderId; } public static async Task upload(DriveService service, string _uploadFile, string folderId, string _fileId, string type) { Debug.Log("Uploading file to Google Drive: " + _uploadFile); if (System.IO.File.Exists(_uploadFile)) { // File body = new File(); // body.Name = System.IO.Path.GetFileName(_uploadFile); // body.Description = "File updated by Diamto Drive Sample"; // body.MimeType = "image/png"; // byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile); // System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray); try { // Replace with your folder ID var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = Path.GetFileName(_uploadFile), Parents = new List { folderId } }; Debug.Log("metadata prepared." + fileMetadata); // FilesResource.CreateMediaUpload request; // Create a new file on drive. using (var stream = new FileStream(_uploadFile, FileMode.Open)) { // Create a new file, with metadata and stream. var request = service.Files.Create(fileMetadata, stream, "image/png"); request.Fields = "id, name"; request.SupportsAllDrives = true; request.ProgressChanged += (progress) => Debug.Log($"Upload Progress: {progress.Status} - Bytes Sent: {progress.BytesSent} {progress.Exception?.Message}"); request.ResponseReceived += (file) => Debug.Log($"File uploaded successfully: {file.Name} (ID: {file.Id})"); var results = await request.UploadAsync(); if (results.Status == UploadStatus.Failed) { // TODO: handle a file upload error. Console.WriteLine($"Error uploading file: {results.Exception.Message}"); } // Debug.Log("request prepared." + request); // var file = request.ResponseBody; // if(file==null) // { // Debug.LogError("Upload failed, file is null."); // return; // } // string fileId= file.Id; // string fileUrl = $"https://drive.google.com/file/d/{fileId}/view"; // Debug.Log("File URL: " + fileUrl); // Debug.Log("File ID: " + fileId); } } catch (Exception e) { Debug.LogError("An error occurred: " + e.Message + " " + e.StackTrace); } } else { Debug.LogError("File does not exist: " + _uploadFile); } } }