2013-03-26 2 views
3

Google 드라이브에 파일을 삽입하고 나열 할 수있는 애플리케이션을 만들고 있습니다. Google Drive SDK v2 API를 사용하고 있습니다. 하지만 내 문제는 내 응용 프로그램을 통해 업로드되지 않은 파일을 나열하지 않습니다. Google 드라이브에서 직접 업로드하면 내 애플리케이션에 표시되지 않습니다.Google 드라이브 SDK API에 자바 드라이브의 Google 드라이브에서 업로드 한 파일이 나열되어 있지 않습니다.

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 범위를'https : // www.googleapis.com/auth/drive'로 바꾼다 –

+0

java android와 함께 일하고있다. 나는 그 범위를 어디에서 바꿀 지 모른다. 여기 내 코드가 있습니다. http://pastebin.com/pTFaVs4A – Dolphin

답변

2

https://www.googleapis.com/auth/drive을 사용하여 앱을 완벽하게 제어 할 때 oauth 범위가 잘못 (https://www.googleapis.com/auth/drive.file) 사용 중이라고 생각합니다.

+0

예 ... 맞습니다 ... Google 드라이브 SDK의 새로운 기능입니다 ... 고맙습니다. 답변 ... –

+1

@PrabhatSubedi : 최근 Google에서 변경된 사항이 있습니까? 제안 된 범위는 여전히 내 응용 프로그램에서 만든 파일 만 나열합니다. http://stackoverflow.com/questions/27759077/drive-sdk-not-listing-all-my-files –

+0

@llamawithabowlcut 현재 Google 드라이브에서 작동하지 않습니다 ... SDK의 설명서 및 버전을 더 잘 찾습니다. –

0

우리 모두가 정말로 원하는 기능을 만들었습니다. 다음은 Google 드라이브 폴더 내의 모든 파일과 폴더를 나열합니다. 디렉토리의 모든 파일을 원하는지 아니면 서비스가 디렉토리 내에서 소유하고있는 파일 만 원하는지 지정할 수 있습니다. 날씨는 ids 만 원하거나 파일 이름 만 원하거나 둘 다 원한다면 필요합니다.

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

또한이 솔루션은 파이썬입니다 - 부적절합니다 –

관련 문제