欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Callable Future 实现多线程按照顺序上传文件

Callable Future 实现多线程按照顺序上传文件

2025/4/30 2:35:00 来源:https://blog.csdn.net/axia623867666/article/details/147593014  浏览:    关键词:Callable Future 实现多线程按照顺序上传文件

  /**
   * 异步上传 BiopsyFlow 中的所有视频和音频文件到暂存服务器
   */
  private List<String> uploadBiopsyFlowFiles(BiopsyFlow biopsyFlow, SyncFile SyncFile) {

    List<String> fileBase64List = syncFile.getFileBase64List();
    if (CollectionUtils.isEmpty(syncFile.getFileBase64List())) {
      log.info("没有文件需要上传");
      return Collections.emptyList();
    }

    log.info("上传文件数量:{}", fileBase64List.size());
    List<Callable<String>> tasks = new ArrayList<>();
    for (String file : fileBase64List) {
      Callable<String> task = () -> {
        log.debug("上传线程:{}", Thread.currentThread().getName());
        try {
          return fileDealUtils.uploadTxFile(file, biopsyFlow.getTransId());
        } catch (Exception e) {
          log.error("文件上传失败, 异常={}", e.getMessage());
          return null;
        }
      };
      tasks.add(task);
    }

    // 使用公共线程池提交任务
    List<Future<String>> futures = new ArrayList<>();
    try {
      for (Callable<String> task : tasks) {
        Future<String> future = pullVideoTaskExecutor.submit(task);
        futures.add(future);
      }

      // 按顺序获取结果
      List<String> fileIds = new ArrayList<>();
      for (Future<String> future : futures) {
        try {
          String fileId = future.get();
          if (fileId != null) {
            fileIds.add(fileId);
          } else {
            log.error("文件上传失败: 返回的文件ID为空");
            return Collections.emptyList();
          }
        } catch (Exception e) {
          log.error("文件上传失败: 异常={}", e.getMessage());
          return Collections.emptyList();
        }
      }

//     // TODO 测试下载,上线之前删除
//      for (String fileId : fileIds) {
//        String base64 = fileDealUtils.testDownMp4(fileId);
//        log.info("下载的文件id:{}, 对应下载的视频base64:{}",  fileId,base64.substring(0,100));
//      }

      return fileIds;
    } catch (Exception e) {
      log.error("任务执行过程中发生异常", e);
      return Collections.emptyList();
    }
  }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词