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

使用AWS Java SDK在ColdFusion中调用Amazon Transcribe遇阻求助

问题分析与解决方案

首先,你的代码确实遗漏了向AWS发送请求的关键步骤——你只构建了请求对象,但没有调用Transcribe服务客户端的方法来提交这个请求!这就是为什么既没有报错,也没有启动转录任务的原因。

1. 补上发送请求的核心步骤

你使用的是AmazonTranscribeAsyncClient(异步客户端),需要调用startTranscriptionJobAsync()方法来提交请求。这个方法会返回一个Future<StartTranscriptionJobResult>对象,用于获取异步操作的结果。

修改后的核心代码片段如下:

/* Set up transcription job */
MediaFileUri = CreateObject('java','com.amazonaws.services.transcribe.model.Media').init();
MediaFileUri.setMediaFileUri('#variables.mediafilelocation#');

invokeRequest = CreateObject('java','com.amazonaws.services.transcribe.model.StartTranscriptionJobRequest').init();
invokeRequest.withLanguageCode('en-US');
invokeRequest.withMedia(MediaFileUri);
invokeRequest.withMediaFormat('wav');
invokeRequest.withTranscriptionJobName('#variables.jobname#');

// 关键:发送异步请求并获取Future对象
transcriptionFuture = serviceObject.startTranscriptionJobAsync(invokeRequest);

// 等待请求完成并获取响应(这里会阻塞直到结果返回,也可以设置超时)
try {
    // 可选:设置超时时间,比如10秒,避免无限等待
    transcriptionResult = transcriptionFuture.get(10, createObject('java','java.util.concurrent.TimeUnit').SECONDS);
    // 输出响应详情,确认任务状态
    writeDump(transcriptionResult);
} catch (java.util.concurrent.TimeoutException te) {
    writeOutput("请求超时:" & te.getMessage());
} catch (com.amazonaws.AmazonServiceException ase) {
    writeOutput("AWS服务错误:" & ase.getMessage() & ",错误代码:" & ase.getErrorCode());
} catch (Exception e) {
    writeOutput("其他错误:" & e.getMessage());
}

/* Shut down client*/
serviceObject.shutdown();

2. 获取AWS响应的正确方式

  • 对于异步客户端:通过Future对象的get()方法(支持设置超时参数)获取StartTranscriptionJobResult,这个对象包含转录任务的完整信息,比如任务ARN、当前状态、创建时间等。
  • 如果你不需要异步处理,也可以改用同步客户端AmazonTranscribeClientBuilder,直接调用startTranscriptionJob(invokeRequest)就能同步获取响应,代码逻辑会更简单。

额外调试技巧:确认请求是否发送

如果还是不确定请求是否到达AWS,可以开启AWS SDK的日志功能,查看HTTP请求和响应的详细内容:

  1. 找到ColdFusion的jvm.config文件,添加以下日志配置参数:
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
-Dorg.apache.commons.logging.simplelog.showdatetime=true
-Dorg.apache.commons.logging.simplelog.log.com.amazonaws=DEBUG
  1. 重启ColdFusion服务后,查看CF日志目录下的日志文件,就能看到SDK发送的请求头、请求体,以及AWS返回的响应详情,以此确认请求是否成功发出。

几个注意点

  • 确保你的AWS凭证拥有transcribe:StartTranscriptionJob的权限,否则会返回权限拒绝的错误。
  • 检查variables.mediafilelocation是否是AWS可访问的S3路径(格式为s3://bucket-name/path/to/file.wav),Transcribe服务需要能直接读取这个存储位置的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:12:36