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

如何使用Java SDK获取AWS Transcribe作业的转录结果

如何通过Java SDK从AWS Transcribe作业获取转录文本?

你遇到的问题很典型——AWS Transcribe返回的TranscriptFileUri是S3对象的完整URL,但S3 Java SDK的getObject方法并不接受直接传入URL,它需要明确的桶名和对象键两个参数。下面是具体的解决步骤和代码示例:


核心思路

Transcribe返回的URI格式通常是两种之一:

  1. 路径式访问:https://s3.<region>.amazonaws.com/<bucket-name>/<object-key>
  2. 虚拟主机式访问:https://<bucket-name>.s3.<region>.amazonaws.com/<object-key>

我们需要从这个URL里提取出桶名和对象键,再传入getObject方法。


Java SDK v1 实现示例

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.S3Object;
import java.net.URI;
import java.net.URL;

public class TranscriptReader {
    public static void main(String[] args) {
        // 从Transcribe作业获取的转录文件URI
        String transcriptUri = job.getTranscript().getTranscriptFileUri();
        
        try {
            URL s3Url = new URI(transcriptUri).toURL();
            String bucketName;
            String objectKey;
            
            // 解析不同格式的S3 URL
            if (s3Url.getHost().startsWith("s3.")) {
                // 路径式格式:提取路径中的第一个部分作为桶名
                String[] pathSegments = s3Url.getPath().split("/");
                bucketName = pathSegments[1];
                // 拼接剩余路径作为对象键
                objectKey = String.join("/", java.util.Arrays.copyOfRange(pathSegments, 2, pathSegments.length));
            } else {
                // 虚拟主机格式:提取主机名的第一个部分作为桶名
                bucketName = s3Url.getHost().split("\\.")[0];
                // 路径部分去掉开头的/作为对象键
                objectKey = s3Url.getPath().substring(1);
            }
            
            // 初始化S3客户端(确保已配置好AWS凭证)
            AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
            
            // 获取S3对象
            S3Object transcriptObject = s3Client.getObject(bucketName, objectKey);
            
            // 读取转录内容(示例:转成字符串)
            String transcriptContent = new String(transcriptObject.getObjectContent().readAllBytes());
            System.out.println("转录内容:" + transcriptContent);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Java SDK v2 实现示例

如果你用的是AWS SDK v2,写法会更简洁:

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.core.ResponseInputStream;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
import java.net.URI;

public class TranscriptReaderV2 {
    public static void main(String[] args) {
        String transcriptUri = job.getTranscript().getTranscriptFileUri();
        
        // 声明S3客户端(try-with-resources自动关闭)
        try (S3Client s3Client = S3Client.create()) {
            URI uri = URI.create(transcriptUri);
            String bucketName;
            String objectKey;
            
            if (uri.getHost().startsWith("s3.")) {
                // 路径式解析
                String path = uri.getPath().substring(1);
                int firstSlashIndex = path.indexOf('/');
                bucketName = path.substring(0, firstSlashIndex);
                objectKey = path.substring(firstSlashIndex + 1);
            } else {
                // 虚拟主机解析
                bucketName = uri.getHost().split("\\.")[0];
                objectKey = uri.getPath().substring(1);
            }
            
            // 构建获取对象请求
            GetObjectRequest getObjectRequest = GetObjectRequest.builder()
                    .bucket(bucketName)
                    .key(objectKey)
                    .build();
            
            // 获取并读取内容
            ResponseInputStream<GetObjectResponse> response = s3Client.getObject(getObjectRequest);
            String transcriptContent = new String(response.readAllBytes());
            System.out.println("转录内容:" + transcriptContent);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 权限配置:确保你的Java程序使用的IAM角色/用户拥有目标S3对象的s3:GetObject权限,否则会抛出访问被拒绝的错误。
  • 区域匹配:如果你的S3桶不在默认区域,初始化S3客户端时需要指定对应区域(比如AmazonS3ClientBuilder.standard().withRegion("us-east-1").build())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:28:21