gpt4 book ai didi

c# - 使用 .net sdk 检索谷歌驱动器的文件列表

转载 作者:行者123 更新时间:2023-12-02 22:04:54 25 4
gpt4 key购买 nike

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

public static List<File> RetrieveAllFiles(DriveService service)
{
List<File> result = new List<File>();
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 而我很确定登录帐户有很多文件!还有其他要求吗?

编辑:对于身份验证:

  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);
}

在 Controller 中

  public ActionResult Index(string state, string code)
{
try
{
List<File> files = new List<File>();
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<ChildReference> 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;
}

关于c# - 使用 .net sdk 检索谷歌驱动器的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com