2013-03-26 2 views
3

Я создаю приложение, которое может вставлять файлы на Google Диск и перечисляет его. Я использую API Google Drive SDK v2. Но моя проблема заключается в том, что это не список файлов, которые не загружаются через мое приложение. Если я загружу его непосредственно с диска Google, он не указан в моем приложении.API Google Диска SDK не перечисляет файл, загруженный с помощью Google Диска в java

Вот метод для отображения файла:

private static List<File> retrieveAllFiles(Drive service) throws IOException { 
     List<File> result = new ArrayList<File>(); 
     Files.List request = service.files().list(); 

     do { 
      try { 
      FileList files = request.execute(); 

      result.addAll(files.getItems()); 
      request.setPageToken(files.getNextPageToken()); 
      } catch (IOException e) { 
      System.out.println("An error occurred: " + e); 
      request.setPageToken(null); 
      } 
     } while (request.getPageToken() != null && 
       request.getPageToken().length() > 0); 

     return result; 
     } 

и я переборе файлов, как это:

List<File> files = retrieveAllFiles(service); 
     for(File f : files) { 
      System.out.println("File Name : "+f.getOriginalFilename(); 
     } 

Может кто-нибудь мне помочь, пожалуйста? Заранее спасибо ...

+0

Я такая же проблема. Можете ли вы показать мне, как это исправить? Я застрял с ним в течение дней – Dolphin

+0

изменить oauth scope на 'https: // www.googleapis.com/auth/drive' –

+0

Я работаю с java android. Я не знаю, где изменить эту область. Вот мой код, вы можете посмотреть http://pastebin.com/pTFaVs4A – Dolphin

ответ

2

Я думаю, вы используете неправильную область oauth, возможно, https://www.googleapis.com/auth/drive.file, которые ограничивают доступ вашего приложения к файлу, созданному или открытому вашим приложением, когда вы должны использовать https://www.googleapis.com/auth/drive, который дает полный контроль над вашим приложением.

+0

Да, это правильно ... Я новичок в Google Drive SDK ... Thanx для вашего ответа ... –

+1

@PrabhatSubedi: Google что-то изменил в последнее время ... изменение область действия, как предлагается, содержит только списки файлов, созданных моим приложением. http://stackoverflow.com/questions/27759077/drive-sdk-not-listing-all-my-files –

+0

@llamawithabowlcut В настоящее время не работает в Google Диске ... Лучше искать документацию и версию SDK. –

0

Я построил функцию, которую мы все действительно искали. Ниже перечислены все файлы и папки внутри папки диска Google. Вы можете указать, хотите ли вы, чтобы все файлы в каталоге или просто файлы, которыми владеет служба в каталоге. Погода, в которой вы хотите только идентификаторы, или если вы хотите только имена файлов или хотите их обоих.

Library_GoogleDriveFileList:

import numpy 
import pprint 
from apiclient import errors 
import collections 

def Main(
    Service = None, 
    FolderId = None, 
    ResultFileNamesOnly = False, 
    ResultFileIdsOnly = True, 
    IncludeServiceFilesOnly = False, 
    SortResults = False, 
    ResultFormat = None, 
    ): 

    Result = None 

    if (ResultFormat is None): 
     ResultFormat = 'list' 

    if (FolderId == None): 
     FolderId = 'root' 

    SearchParameterString = "'" + FolderId + "' in parents" 

    SearchOwners = None 
    if (IncludeServiceFilesOnly): 
     SearchOwners = 'DEFAULT' 
    else: 
     SearchOwners = 'DOMAIN' 

    print 'SearchOwners', SearchOwners 

    #Because there is a return limit of 460 files (falsly documented as 1000) 
    # we need to loop through and grab a few at a time with different requests 
    DriveFileItems = [] 
    PageToken = None 
    while True: 
     try: 
      print 'PageToken', PageToken 
      DriveFilesObject = Service.files().list(
       q   = SearchParameterString, 
       corpus  = SearchOwners, #'DOMAIN' 
       maxResults = 200, 
       pageToken = PageToken, 
       ).execute() 

      DriveFileItems.extend(DriveFilesObject['items']) 
      PageToken = DriveFilesObject.get('nextPageToken') 
      if not PageToken: 
       break 
     except errors.HttpError, error: 
      print 'An error occurred: %s' % error 
      break 


    #print 'DriveFileItems', DriveFileItems 
    #pprint.pprint(DriveFileItems) 

    FileNames = [] 
    FileIds = [] 
    for Item in DriveFileItems: 
     FileName = Item["title"] 
     FileNames.append(FileName) 

     FileId = Item["id"] 
     FileIds.append(FileId) 

    #print 'FileIds' 
    #pprint.pprint(FileIds) 


    if ResultFileNamesOnly == False and ResultFileIdsOnly == False: 


     if (ResultFormat == 'dict'): 
      Result = collections.OrderedDict() 
      for FileName , FileId in zip(FileNames, FileIds): 
       Result [FileName] = FileId 
     elif (ResultFormat == 'list'): 
      Result = numpy.array([FileIds, FileNames]).T.tolist() 

    elif ResultFileNamesOnly == True and ResultFileIdsOnly == False: 
     Result = FileNames 

    elif ResultFileNamesOnly == False and ResultFileIdsOnly == True: 
     Result = FileIds 

    elif ResultFileNamesOnly == True and ResultFileIdsOnly == True:  
     raise Exception('ResultFileNamesOnly == True and ResultFileIdsOnly == True:') 

    if (ResultFormat == 'list'):#type(Result).__name__ == 'list'): 
     Result = list(reversed(Result)) 

    if (SortResults): 
     Result = list(sorted(Result)) 
     #TODO -> more intellegent sort for dict, 2d list 

    return Result 
+0

Я не могу удалить свой собственный ответ - это принадлежит на другой странице: http://stackoverflow.com/questions/11730454/clarification-on-maxresults-and-nextpagetoken-using-google-drive-api-v2/39417284 # 39417284 –

+0

Также это решение - python - добавление к нему неуместности –

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