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

Laravel中无需上传至S3即可调用Textract分析上传PDF是否可行?

Amazon Textract调用是否必须预先上传PDF到S3?

核心结论

不需要强制上传到S3,两种调用模式可选,可根据你的业务场景适配:

  • 如果你处理的是单页PDF、文件大小不超过10MB,可以直接用同步API把用户上传的文件二进制流直接传给Textract,完全不用走S3存储
  • 如果你处理的是多页PDF、单文件超过10MB,就必须用异步API,这种场景下Textract要求源文件必须存放在S3 bucket中,没有绕过方案

Laravel端直接传PDF流的实现方式

用户上传的PDF可以直接在控制器里拿到二进制内容,不需要落盘也不需要传到S3,直接调用Textract的AnalyzeDocument或者DetectDocumentText同步接口即可,参考实现逻辑:

// 先安装AWS SDK for PHP
// composer require aws/aws-sdk-php
use Aws\Textract\TextractClient;

public function parsePdf(Request $request)
{
    // 验证上传文件格式和大小
    $request->validate([
        'pdf_file' => 'required|file|mimes:pdf|max:10240', // 限制10MB以内,适配同步接口要求
    ]);

    // 直接获取上传文件的二进制内容
    $pdfContent = file_get_contents($request->file('pdf_file')->getPathname());

    // 初始化Textract客户端
    $textractClient = new TextractClient([
        'version' => 'latest',
        'region' => '替换为你的AWS区域,如us-east-1',
        'credentials' => [
            'key' => '你的AWS_ACCESS_KEY_ID',
            'secret' => '你的AWS_SECRET_ACCESS_KEY',
        ]
    ]);

    // 调用同步识别接口,直接传Bytes参数,无需配置S3相关参数
    $result = $textractClient->detectDocumentText([
        'Document' => [
            'Bytes' => $pdfContent,
        ]
    ]);

    // 处理返回的识别结果
    $extractedText = '';
    foreach ($result['Blocks'] as $block) {
        if ($block['BlockType'] === 'LINE') {
            $extractedText .= $block['Text'] . PHP_EOL;
        }
    }

    return response()->json([
        'extracted_text' => $extractedText
    ]);
}

注意事项

  • 同步接口仅支持单页PDF,即使多页PDF大小在10MB以内,Textract也只会返回第一页的识别结果
  • 生产环境不要把AWS凭证硬写到代码中,建议用IAM角色、环境变量或者AWS Secrets Manager管理凭证
  • 如果业务需要处理多页PDF,只能先将用户上传的文件传到S3,再调用StartDocumentTextDetection这类异步接口,待识别完成后拉取结果,该场景没有跳过S3的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:04