我正在尝试从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);
}
在控制器
中 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();
}
答案 0 :(得分:5)
您必须使用文件夹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;
}
答案 1 :(得分:0)
我遇到了同样的问题,并通过添加缺少的驱动器范围解决了这个问题。
答案 2 :(得分:0)
为了能够列出您需要的文件和文件夹,请添加SCOPE:
&#34; https://www.googleapis.com/auth/drive.appfolder&#34; (允许对文件元数据进行只读访问,但不允许任何读取或下载文件内容的访问权限)