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

如何在ES5环境的AWS Lambda中从S3下载PDF文件?

解决方案

优先方案:直接使用AWS原生S3 SDK(无需Amplify依赖)

Lambda环境默认内置AWS SDK v2,不需要额外安装包,直接用require语法调用,这是后端服务操作S3最高效的方式,比Amplify Storage更轻量:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
    // 1. 从S3获取文件
    const getParams = {
        Bucket: '你的S3桶名称', // 替换为实际桶名
        Key: 'test.txt' // 目标文件的路径/名称
    };

    try {
        // 获取到的data.Body是Buffer类型,等价于后端场景的Blob
        const { Body: fileBuffer } = await s3.getObject(getParams).promise();

        // 2. 修改文件(示例:文本文件追加内容;PDF需用pdf-lib等专用库处理)
        const modifiedContent = fileBuffer.toString('utf8') + '\n购买完成后追加的内容';
        const modifiedBuffer = Buffer.from(modifiedContent, 'utf8');

        // 3. 重新上传至S3
        const putParams = {
            Bucket: '你的S3桶名称',
            Key: 'new-test.txt', // 新文件名
            Body: modifiedBuffer,
            ContentType: 'text/plain' // PDF需设为application/pdf
        };

        await s3.putObject(putParams).promise();
        return { statusCode: 200, body: '文件处理完成' };
    } catch (err) {
        console.error('处理失败:', err);
        return { statusCode: 500, body: JSON.stringify(err) };
    }
};

若坚持使用Amplify Storage(不推荐)

如果一定要用Amplify的封装,需要先安装依赖并调整配置:

  1. 在Lambda本地目录执行npm install @aws-amplify/storage,将node_modules一起打包上传(或用Lambda层管理依赖)
  2. 使用require语法导入并配置:
const { Storage } = require('@aws-amplify/storage');

// 配置Amplify,Lambda通过IAM角色自动获取权限,无需硬编码密钥
Storage.configure({
    AWSS3: {
        bucket: '你的S3桶名称',
        region: '你的AWS区域'
    }
});

exports.handler = async (event) => {
    try {
        // 必须设置download: true才能获取文件内容,否则返回的是访问URL
        const file = await Storage.get('test.txt', { 
            level: 'public',
            download: true
        });
        const fileBuffer = file.Body;

        // 后续修改、上传步骤同上方示例
        // ...

        return { statusCode: 200, body: '处理完成' };
    } catch (err) {
        console.error(err);
        return { statusCode: 500, body: JSON.stringify(err) };
    }
};

关键注意事项

  • 给Lambda的IAM角色添加S3的GetObject和PutObject权限,否则会触发权限错误
  • 处理PDF文件时,需额外安装pdf-lib等专用库,打包后部署到Lambda
  • 优先选择原生S3 SDK,避免Amplify的额外依赖,提升Lambda启动速度和稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:41