如何通过Google API在C#控制台应用中列出Google Drive所有文件(含视频)
在C#控制台应用中列出Google Drive所有文件
实现步骤
- 在
Main方法中初始化Drive服务,选择对应的授权方式(用户OAuth或服务账号) - 编写文件列表方法,处理API分页请求(Drive API单次最多返回1000条结果)
- 可选:添加视频文件筛选逻辑,仅列出视频类型文件
修改后的完整代码
using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Services; using Google.Apis.Util.Store; using System; using System.IO; using System.Threading; namespace test { internal class Program { static void Main(string[] args) { Program program = new Program(); // 二选一:使用用户OAuth授权或服务账号授权 DriveService driveService = program.GetService(); // DriveService driveService = program.GetClient(); if (driveService != null) { ListAllFiles(driveService); // 如需仅列出视频文件,替换为下面的方法调用 // ListVideoFiles(driveService); } else { Console.WriteLine("无法初始化Drive服务"); } Console.ReadLine(); } // 列出Drive中所有文件(包含视频) private static void ListAllFiles(DriveService service) { Console.WriteLine("正在列出Google Drive所有文件:"); Console.WriteLine("--------------------------------"); string pageToken = null; do { var request = service.Files.List(); // 指定返回字段,减少数据传输量 request.Fields = "nextPageToken, files(id, name, createdTime, mimeType)"; request.PageToken = pageToken; request.PageSize = 1000; // API单次返回上限 var result = request.Execute(); foreach (var file in result.Files) { Console.WriteLine($"文件名: {file.Name}"); Console.WriteLine($"文件ID: {file.Id}"); Console.WriteLine($"创建时间: {file.CreatedTime?.ToString("yyyy-MM-dd HH:mm:ss")}"); Console.WriteLine($"文件类型: {file.MimeType}"); Console.WriteLine("--------------------------------"); } pageToken = result.NextPageToken; } while (pageToken != null); Console.WriteLine("文件列表加载完成"); } // 可选:仅列出视频文件 private static void ListVideoFiles(DriveService service) { Console.WriteLine("正在列出Google Drive所有视频文件:"); Console.WriteLine("--------------------------------"); string pageToken = null; do { var request = service.Files.List(); request.Fields = "nextPageToken, files(id, name, createdTime, mimeType)"; request.PageToken = pageToken; request.PageSize = 1000; // 通过MIME类型过滤视频文件 request.Q = "mimeType contains 'video/'"; var result = request.Execute(); foreach (var file in result.Files) { Console.WriteLine($"文件名: {file.Name}"); Console.WriteLine($"文件ID: {file.Id}"); Console.WriteLine($"创建时间: {file.CreatedTime?.ToString("yyyy-MM-dd HH:mm:ss")}"); Console.WriteLine($"视频类型: {file.MimeType}"); Console.WriteLine("--------------------------------"); } pageToken = result.NextPageToken; } while (pageToken != null); Console.WriteLine("视频文件列表加载完成"); } public DriveService GetService() { ClientSecrets clientSecrets = new ClientSecrets { ClientId = "你的ClientId", // 替换为实际ClientId ClientSecret = "你的ClientSecret" // 替换为实际ClientSecret }; string tokenPath = "Token存储路径"; // 替换为Token保存路径 string[] scopes = { DriveService.Scope.Drive }; UserCredential authorizedUserCredential = GoogleWebAuthorizationBroker.AuthorizeAsync( clientSecrets, scopes, "user", CancellationToken.None, new FileDataStore(tokenPath, true) ).Result; return new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = authorizedUserCredential, ApplicationName = "你的应用名称", // 替换为实际应用名称 }); } public DriveService GetClient() { string credenitalsJSONPath = "你的私钥JSON路径"; // 替换为私钥文件路径 using (var stream = new FileStream(credenitalsJSONPath, FileMode.Open, FileAccess.Read)) { var credentials = GoogleCredential.FromStream(stream); if (credentials != null) { if (credentials.IsCreateScopedRequired) { string[] scopes = { DriveService.Scope.Drive }; credentials = credentials.CreateScoped(scopes); } return new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credentials, ApplicationName = "你的应用名称", // 替换为实际应用名称 }); } } return null; } } }
关键说明
- 分页处理:利用
nextPageToken循环请求,确保获取所有文件,避免因单次请求上限导致遗漏 - 字段优化:通过
request.Fields指定返回字段,减少不必要的数据传输,提升请求效率 - 视频筛选:使用
mimeType contains 'video/'作为查询条件,可匹配所有视频格式文件(如MP4、AVI等) - 授权选择:
GetService用于用户OAuth授权(访问当前用户的Drive),GetClient用于服务账号授权(访问服务账号关联或共享的Drive文件)
内容的提问来源于stack exchange,提问作者user20317883
相关产品推荐
相关产品推荐

