You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dropbox Java SDK获取文件夹数据及创建文件夹遇阻塞问题

Dropbox Java SDK调用listFolder时阻塞,无法获取文件夹数据

问题详情

我正在开发一款向Dropbox上传文件的应用,目前在处理Dropbox内的文件/文件夹时遇到阻塞问题。参考Dropbox Java SDK教程编写了获取文件夹数据及创建新文件夹的方法,但该方法无法正常运行。能够成功获取账户信息,但尝试获取文件夹数据时程序发生阻塞,且已在Dropbox应用设置中开启所有文件权限。

代码实现

private void createFolder() throws DbxException {
    log.info("start createFolder");
    FullAccount userData = clientV2.users().getCurrentAccount();
    log.info("userData {}", userData.getName());
    ListFolderResult folderList = clientV2.files().listFolder("");
    log.info("fullFolderList data {}", folderList);
    while (true){
        for(Metadata metadata: folderList.getEntries()){
            log.info("folderData: {}", metadata.getPathLower());
        }
        if(!folderList.getHasMore()) {
            break;
        }
        folderList = clientV2.files().listFolderContinue(folderList.getCursor());
    }
    CreateFolderResult resp = clientV2.files().createFolderV2("/testovaciSlozka");
    log.info("createFolder: {}", resp);
}

日志输出

2024-05-02T14:45:50.064+02:00 INFO 23828 --- [mail] [Mail-EventQueue] com.example.mail.component.Monitor : start createFolder
2024-05-02T14:45:50.713+02:00 INFO 23828 --- [mail] [Mail-EventQueue] com.example.mail.component.Monitor : userData {"given_name":"Miloslav","surname":"Lejček","familiar_name":"Miloslav","display_name":"Miloslav Lejček","abbreviated_name":"ML"}

解决方案

  • 改用异步客户端
    同步客户端在单线程事件队列(如日志中的Mail-EventQueue)中运行易引发阻塞,建议切换为异步客户端处理请求:

    DbxRequestConfig config = DbxRequestConfig.newBuilder("your-app-name").build();
    DbxClientV2Async client = new DbxClientV2Async(config, "your-access-token");
    // 通过CompletableFuture处理异步结果
    client.files().listFolder("")
        .thenAccept(folderList -> {
            // 遍历文件夹条目逻辑
            while (true) {
                for(Metadata metadata : folderList.getEntries()) {
                    log.info("folderData: {}", metadata.getPathLower());
                }
                if (!folderList.getHasMore()) break;
                client.files().listFolderContinue(folderList.getCursor())
                    .thenAccept(nextFolderList -> folderList = nextFolderList);
            }
        })
        .exceptionally(e -> {
            log.error("获取文件夹列表失败", e);
            return null;
        });
    
  • 添加请求超时限制
    若坚持使用同步客户端,初始化时设置HTTP请求超时,避免无限等待:

    DbxRequestConfig config = DbxRequestConfig.newBuilder("your-app-name")
        .withHttpRequestTimeout(Duration.ofSeconds(30))
        .build();
    DbxClientV2 client = new DbxClientV2(config, "your-access-token");
    
  • 隔离API调用线程
    将Dropbox操作放到独立线程池执行,避免阻塞原事件队列:

    ExecutorService dropboxExecutor = Executors.newFixedThreadPool(2);
    dropboxExecutor.submit(() -> {
        try {
            createFolder();
        } catch (DbxException e) {
            log.error("Dropbox操作异常", e);
        }
    });
    
  • 排查网络环境
    确认应用运行环境可正常访问Dropbox API,无代理拦截或防火墙限制,可直接测试API端点的连通性排除网络问题。

内容的提问来源于stack exchange,提问作者Milousel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:04:52