2016-12-24 3 views
1

Я пытаюсь получить папки и файлы с Google Диска, и есть некоторые неочевидные вещи, которые я не могу понять.API Google Диска .Net. Нет метаданных для доступных файлов

Прежде всего, я получаю 37 элементов в результате - и это неправильно, потому что у меня никогда не было 37 файлов на моем Диске, поэтому откуда взялись все эти файлы?

Во-вторых, я не получаю метаданные файлов, такие как «Размер» или «Расширение» или «Родители» - все эти свойства являются «нулевыми», по крайней мере, для половины возвращенных предметов - может кто-то объяснить, что означает «Родители "являются" нулевыми "?

И последнее, могу ли я получить файлы и папки поэтапно, например, в OneDrive, например, получить все файлы и папки из корневого каталога диска, а затем получить детей из выбранной папки (или загрузить элемент if это файл)?

Насколько я знаю, у меня есть, чтобы получить все файлы и папки, а затем построить дерево, чтобы показать пользователю, как и для меня это не очень хорошо, из-за нескольких родительских вещей и т.д.

Вот код Я использую, чтобы получить файлы и свойства:

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», «VI ewedByMe "," родители "имеют значение null. Может кто-нибудь объяснить, что происходит?

ответ

1

Во-первых, вы можете проверить, как ваше разрешение на доступ к учетной записи пользователя.

Во-вторых, попробуйте проверить OAuth 2.0 Playground, как предложено в соответствующем SO post, чтобы проверить, что-то не так в вашем коде или в API. Также указано в сообщении, что файлы, подобные папкам, Google Docs, которые являются просто ссылками, будут пустыми.

Для команды «Дерево», как функция для вашего Google Диска, все зависит от того, как ваш подход. Я нашел учебник с использованием Apps Script, в котором будут показаны основные шаги по получению иерархической древовидной диаграммы для файлов вашего Диска.

Надеюсь, это поможет.

+1

Как я указал в своем посте - я вхожу в свой собственный GoogleDrive, и я уверен, что код в порядке «buildable». Я думаю, что уже нашел, что произошло, я использовал API v3 вместо использования API v2. Anyways - thx для вашего времени, проверит ссылки. – Overrided

Смежные вопросы