我正在尝试从Google云端硬盘获取文件夹和文件,并且有些不明显的内容我无法理解。
首先,结果是我得到了37个项目-这是错误的,因为我的云端硬盘上从来没有37个文件,那么所有这些文件都来自哪里?
其次,我没有收到文件元数据,例如“大小”,“扩展名”或“父母”-至少返回的所有项目中,所有这些属性均为“空”-有人可以解释“父母”是什么意思“?
最后,我是否可以像在OneDrive中那样一步一步地获取文件和文件夹,例如,从驱动器的根目录中获取所有文件和文件夹,然后再从选定的文件夹中获取子项(如果是文件,则下载项目)?
据我所知,我必须获取所有文件和文件夹,然后构建一棵树以将其显示给用户,对我来说,这是不好的,因为有多父项等。
这是我用来获取文件和属性的代码:
public UserCredential Authorize()
{
UserCredential credential = null;
using (var stream =
new FileStream("path_to_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, "path_to_save_creds.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
return credential;
}
public List<File> RetrieveAllFiles(DriveService service)
{
List<File> result = new List<File>();
FilesResource.ListRequest request = service.Files.List();
request.Fields =
"nextPageToken, files(name, id, size, kind, parents, sharedWithMeTime, shared, sharingUser, fileExtension, viewedByMe, viewedByMeTime, trashed)";
request.Spaces = "drive";
do
{
try
{
FileList files = request.Execute();
result.AddRange(files.Files);
request.PageToken = files.NextPageToken;
}
catch (Exception e)
{
/*handle exception here*/
}
} while (!String.IsNullOrEmpty(request.PageToken));
return result;
}
这是我如何调用上述方法:
UserCredential credential = Authorize();
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var googleFiles = RetrieveAllFiles(service);
此时,我有37个项目,“ fileExtension”,“ viewedByMe”,“ parents”等属性为null。有人可以解释会发生什么吗?
首先,您可能需要检查您的授权以查看正在访问谁的帐户。
其次,尝试按照相关SO帖子中的建议检查OAuth 2.0 Playground,以测试您的代码或API中是否存在错误。帖子中还指出,仅是链接的文件(如文件夹,Google Docs)将为null。
对于您的Google云端硬盘而言,树状命令之类的功能将完全取决于您的方法。我找到了一个使用Apps脚本的教程,该教程将显示获取Drive文件的分层树形图的基本步骤。
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句