谷歌驱动器API - 太慢了



我刚刚在研究Google Drive API。我有一个问题,太慢了。我使用文档中的方法。例如:

List<File> getFilesByParrentId(String Id, Drive service) throws IOException {
    Children.List request = service.children().list(Id);
    ChildList children = request.execute();
    List<ChildReference> childList = children.getItems();
    File file;
    List<File> files = new ArrayList<File>();
    for (ChildReference child : childList) {
        file = getFilebyId(child.getId(), service);
        if (file == null) {
            continue;
        } else if (file.getMimeType().equals(FOLDER_IDENTIFIER)) {
            System.out.println(file.getTitle() + " AND "
                    + file.getMimeType());
            files.add(file);
        }
    }
    return files;
}
private File getFilebyId(String fileId, Drive service) throws IOException {
    File file = service.files().get(fileId).execute();
    if (file.getExplicitlyTrashed() == null) {
        return file;
    }
    return null;
}

问:这种方法有效,但太慢了,大约30秒。

如何优化?例如,不获取所有文件(仅文件夹或仅文件)。或类似的东西。

您可以使用q参数和一些东西,例如:

service.files().list().setQ(mimeType != 'application/vnd.google-apps.folder and 'Id' in parents and trashed=false").execute();

这将为您提供所有不是文件夹,未回收且其父级具有id ID的文件。多合一请求。

顺便说一句,API 并不慢。你的算法,提出了太多的请求,是。

public   void getAllFiles(String id, Drive service) throws IOException{
    String query="'"+id + "'"+ " in parents and trashed=false and mimeType!='application/vnd.google-apps.folder'";
    FileList files = service.files().list().setQ(query).execute();
    List<File> result = new ArrayList<File>();
    Files.List request = service.files().list();
    do {
        result.addAll(files.getItems());
        request.setPageToken(files.getNextPageToken());
    } while (request.getPageToken() != null && request.getPageToken().length() > 0);
}

相关内容

  • 没有找到相关文章