using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Services; using Google.Apis.Util.Store; using System.IO; using System.Threading; using System.Threading.Tasks; namespace CPRNIMS.Domain.Services { public class GoogleDriveService { private DriveService _driveService; public GoogleDriveService(string serviceAccountKeyFilePath) { serviceAccountKeyFilePath = "wwwroot/GoogleSecurity/credentials.json"; InitializeDriveService(serviceAccountKeyFilePath); } private void InitializeDriveService(string serviceAccountKeyFilePath) { var credential = GoogleCredential.FromFile(serviceAccountKeyFilePath) .CreateScoped(new[] { DriveService.ScopeConstants.Drive }); _driveService = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential }); } public async Task UploadFileAsync(string filePath, string fileName) { var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = fileName }; FilesResource.CreateMediaUpload request; using (var stream = new FileStream(filePath, FileMode.Open)) { request = _driveService.Files.Create(fileMetadata, stream, "image/jpeg"); request.Fields = "id"; await request.UploadAsync(); } var file = request.ResponseBody; return file.Id; } public async Task UpdateFileAsync(string fileId, string newFilePath) { var fileMetadata = new Google.Apis.Drive.v3.Data.File(); using (var stream = new FileStream(newFilePath, FileMode.Open)) { await _driveService.Files.Update(fileMetadata, fileId, stream, "image/jpeg").UploadAsync(); } } public async Task DeleteFileAsync(string fileId) { await _driveService.Files.Delete(fileId).ExecuteAsync(); } public async Task GetFileIdByNameAsync(string fileName) { //14uzoQM4pagf7F_CUZmwRxmaCAJ_8Nayg fileName = "1.jpg"; var request = _driveService.Files.List(); request.Q = $"name='{fileName}'"; var response = await request.ExecuteAsync(); if (response.Files.Count > 0) return response.Files[0].Id; else return null; } public async Task GetFileIdByIdAsync(string fileName) { //14uzoQM4pagf7F_CUZmwRxmaCAJ_8Nayg fileName = "1"; var request = _driveService.Files.List(); request.Q = $"name='{fileName}'"; var response = await request.ExecuteAsync(); if (response.Files.Count > 0) return response.Files[0].Id; else return null; } public async Task DownloadFileByNameAsync(string fileName, string downloadDirectory) { var fileId = await GetFileIdByNameAsync(fileName); if (fileId != null) { var downloadPath = Path.Combine(downloadDirectory, fileName); await DownloadFileByIdAsync(fileId, downloadPath); return downloadPath; } else { throw new FileNotFoundException($"File with name '{fileName}' not found on Google Drive."); } } public async Task DownloadFileByIdAsync(string fileId, string downloadPath) { var request = _driveService.Files.Get(fileId); using (var stream = new FileStream(downloadPath, FileMode.Create)) { await request.DownloadAsync(stream); } } /* public async Task DownloadFileByNameAsync(string fileName, string downloadPath) { var fileId = await GetFileIdByNameAsync(fileName); if (fileId != null) { await DownloadFileByIdAsync(fileId, downloadPath); } else { throw new FileNotFoundException($"File with name '{fileName}' not found on Google Drive."); } } */ } }