使用.net sdk检索google驱动器文件列表

我正在尝试从Google云端硬盘中获取文件列表,我正在使用它们提供的示例:

public static List RetrieveAllFiles(DriveService service) { List result = new List(); FilesResource.ListRequest request = service.Files.List(); do { try { FileList files = request.Fetch(); result.AddRange(files.Items); request.PageToken = files.NextPageToken; } catch (Exception e) { Console.WriteLine("An error occurred: " + e.Message); request.PageToken = null; } } while (!String.IsNullOrEmpty(request.PageToken)); return result; } 

它总是返回文件count = 0而我很确定登录帐户有很多文件! 还有其他需要吗?

编辑:用于身份validation:

  public static IAuthenticator GetCredentials(String authorizationCode, String state) { String emailAddress = ""; try { IAuthorizationState credentials = ExchangeCode(authorizationCode); Userinfo userInfo = GetUserInfo(credentials); String userId = userInfo.Id; emailAddress = userInfo.Email; if (!String.IsNullOrEmpty(credentials.RefreshToken)) { StoreCredentials(userId, credentials); return GetAuthenticatorFromState(credentials); } else { credentials = GetStoredCredentials(userId); if (credentials != null && !String.IsNullOrEmpty(credentials.RefreshToken)) { return GetAuthenticatorFromState(credentials); } } } catch (CodeExchangeException e) { Console.WriteLine("An error occurred during code exchange."); // Drive apps should try to retrieve the user and credentials for the current // session. // If none is available, redirect the user to the authorization URL. e.AuthorizationUrl = GetAuthorizationUrl(emailAddress, state); throw e; } catch (NoUserIdException) { Console.WriteLine("No user ID could be retrieved."); } // No refresh token has been retrieved. String authorizationUrl = GetAuthorizationUrl(emailAddress, state); throw new NoRefreshTokenException(authorizationUrl); } internal static Google.Apis.Drive.v2.DriveService BuildService(IAuthenticator credentials) { return new Google.Apis.Drive.v2.DriveService(credentials); } 

在控制器中

  public ActionResult Index(string state, string code) { try { List files = new List(); IAuthenticator authenticator = Utils.GetCredentials(code, state); // Store the authenticator and the authorized service in session Session["authenticator"] = authenticator; DriveService service = Utils.BuildService(authenticator); if (authenticator != null && service != null) { files = GoogleDriveHelper.RetrieveAllFiles(service); return View(files); } } catch (CodeExchangeException) { if (Session["service"] == null || Session["authenticator"] == null) { Response.Redirect(Utils.GetAuthorizationUrl("", state)); } } catch (NoRefreshTokenException e) { Response.Redirect(e.AuthorizationUrl); } return View(); } 

您必须使用文件夹ID来获取文件。 我用它来获取文件夹文件:

 string folderid = FindFolder(service, rootFolder,CreatedFolder.Title); List listadoFiles = service.Children.List(folderid).Fetch().Items.ToList(); public static string FindFolder(DriveService service,String parentfolderId, string FolderName) { ChildrenResource.ListRequest request = service.Children.List(parentfolderId); request.Q = "mimeType='application/vnd.google-apps.folder' and title='" + FolderName + "' "; do { try { ChildList children = request.Fetch(); if (children != null && children.Items.Count > 0) { return children.Items[0].Id; } foreach (ChildReference child in children.Items) { Console.WriteLine("File Id: " + child.Id); } request.PageToken = children.NextPageToken; } catch (Exception e) { Console.WriteLine("An error occurred: " + e.Message); request.PageToken = null; } } while (!String.IsNullOrEmpty(request.PageToken)); return string.Empty; } 

我遇到了同样的问题并通过添加缺少的驱动器范围解决了它。

为了能够列出文件和文件夹,您需要添加SCOPE:

https://www.googleapis.com/auth/drive.appfolder ”(允许对文件元数据进行只读访问,但不允许任何读取或下载文件内容的访问权限)

https://developers.google.com/drive/web/scopes