获取所有Google Drive文件夹的列表只返回一个文件夹



我正在改进我们的谷歌驱动器集成
当前状态:已经实现了使用硬编码的folderId将文件保存到Google Drive文件夹中。这没有问题
现在:我想扩展这个逻辑,我需要这个所有文件夹的列表。所以我遵循了这个指南:https://developers.google.com/drive/api/guides/search-files
问题是我只收到**一个**文件夹,但在谷歌驱动器中有10个。
有人知道我错过或忽略了什么吗?为什么结果不包含nextPageToken?花了一整天的时间,这让我抓狂
这是我的方法(我使用服务帐户进行连接(:
@Override
public List<File> getAllFolders() throws IOException {
Drive service = googleDriveProvider.getService();
List<File> files = new ArrayList<>();
String pageToken = null;
do {
FileList result = service.files().list()
.setQ("mimeType='application/vnd.google-apps.folder'")
.setSpaces("drive")
.setSupportsAllDrives(true)
.setIncludeItemsFromAllDrives(true)
.setFields("nextPageToken, files(id, name, parents)")
.setPageToken(pageToken)
.execute();
for (File file : result.getFiles()) {
System.out.printf("Found file: %s (%s)n",
file.getName(), file.getId());
}
files.addAll(result.getFiles());
pageToken = result.getNextPageToken();
} while (pageToken != null);
return files;
}

这是GoogleDriveProvider:

@Service
public class GoogleDriveProvider {
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final Set<String> SCOPES = DriveScopes.all();
private static final String GET_DRIVE_SERVICE_ERROR_MESSAGE = "Getting instance of Google drive has failed, error: [%s]";
@Value("${google.drive.service.account.auth.json}")
private String authJson;
@Value("${info.app.name}")
private String appName;

public Drive getService() throws GoogleDriveException {
try {
final NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredentials credentials = GoogleCredentials.fromStream(
new ByteArrayInputStream(authJson.getBytes())).createScoped(SCOPES);
credentials.refreshIfExpired();
HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);
return new Drive.Builder(httpTransport, JSON_FACTORY, requestInitializer)
.setApplicationName(appName)
.build();
} catch (IOException | GeneralSecurityException e) {
throw new GoogleDriveException(
format(GET_DRIVE_SERVICE_ERROR_MESSAGE, e.getMessage()), e);
}
}
}

问题已解决。文件夹必须由服务帐户创建,或者必须首先与服务帐户共享。

最新更新