DD.WellWorkover.Cloud/ConsoleApp1/GoogleDriveFilesService.cs
2021-10-26 17:22:32 +05:00

130 lines
5.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Responses;
using Google.Apis.Drive.v3;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using Google.Apis.Drive.v3.Data;
using System.IO;
using System.Collections.Generic;
// usage example at the very bottom
namespace ConsoleApp1
{
public class GoogleDriveFilesService
{
private static DriveService GetService()
{ // ключи для почты asbautodrilling@gmail.com.
var tokenResponse = new TokenResponse
{
AccessToken = "ya29.a0ARrdaM-lM7q0TIC_DXixR4oW63QUftjSPHl-8nIdvZwtqA8Z1bXtlYpDrQXj9UFTjW8FW8uqPMrdamUSp4kO4a9JX7FddkBWxaJ_omSJpqzDfnHTHA_7-zGMUohaAsmPLsQtFz_GUmB5ZoVLmA8xWdbJxVxU",
RefreshToken = "1//04FeDguc19IfgCgYIARAAGAQSNwF-L9Ir8U7wX2seanUzsxXXGgFzOYQqjbtN9O27ZZybbOobZjVAo_4_eFNLMX1ElPKOFVWsrJQ"
};
var applicationName = "Files"; // Use the name of the project in Google Cloud
var username = "asbautodrilling@gmail.com"; // Use your email
var apiCodeFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = "1020584579240-f7amqg35qg7j94ta1ntgitajq27cgh49.apps.googleusercontent.com",
ClientSecret = "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"
},
Scopes = new[] {DriveService.Scope.Drive},
DataStore = new FileDataStore(applicationName)
});
var credential = new UserCredential(apiCodeFlow, username, tokenResponse);
var service = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = applicationName
});
return service;
}
//public string CreateFolder(string parent, string folderName)
public string CreateFolder(string folderName) // Это fileName. У гугла почему-то все называется folder: и папка, и файл.
{ // С parent почему-то не дружит, выкидывает Exception.
var service = GetService();
var driveFolder = new Google.Apis.Drive.v3.Data.File();
driveFolder.Name = folderName;
driveFolder.MimeType = "application/vnd.google-apps.folder";
//driveFolder.Parents = new string[] { parent };
var command = service.Files.Create(driveFolder);
var file = command.Execute();
return file.Id;
}
//public string UploadFile(Stream file, string fileName, string fileMime, string folder, string fileDescription)
public string UploadFile(Stream file, string fileName, string fileMime, string fileDescription)
{
DriveService service = GetService();
var driveFile = new Google.Apis.Drive.v3.Data.File();
driveFile.Name = fileName;
driveFile.Description = fileDescription;
driveFile.MimeType = fileMime;
//driveFile.Parents = new [] {folder};
var request = service.Files.Create(driveFile, file, fileMime);
request.Fields = "id";
var response = request.Upload();
if (response.Status != Google.Apis.Upload.UploadStatus.Completed)
throw response.Exception;
return request.ResponseBody.Id;
}
//public IEnumerable<Google.Apis.Drive.v3.Data.File> GetFiles(string folder)
public IEnumerable<Google.Apis.Drive.v3.Data.File> GetFiles()
{
var service = GetService();
var fileList = service.Files.List();
// Это выражение ниже тоже чот не работает, выкидывает Exception. Без них выгружаются все файлы и
// папки водин список.
//fileList.Q =$"mimeType!='application/vnd.google-apps.folder' and '{folder}' in parents";
//fileList.Fields = "nextPageToken, files(id, name, size, mimeType)";
var result = new List<Google.Apis.Drive.v3.Data.File>();
string pageToken = null;
do
{
fileList.PageToken = pageToken;
var filesResult = fileList.Execute();
var files = filesResult.Files;
pageToken = filesResult.NextPageToken;
result.AddRange(files);
} while (pageToken != null);
return result;
}
public void DeleteFile(string fileId)
{
var service = GetService();
var command = service.Files.Delete(fileId);
var result = command.Execute();
}
}
}
// usage example:
// var service = new GoogleDriveFilesService();
//
// var files = service.GetFiles();
// Console.WriteLine(files);
//
// var newFolderId = service.CreateFolder("testText.txt");
// Console.WriteLine(newFolderId);
//
// var path = "/home/vladimir/TestUploadFile.txt";
// var fileInfo = new FileInfo(path);
// var fileStream = File.Open(path, FileMode.Open);
// var uploadedFileId = service.UploadFile(fileStream, fileInfo.Name, "", "uploaded");
// Console.WriteLine(uploadedFileId);