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

如何通过AWS Lambda读取S3存储桶TXT文件内容并生成HTML页面展示

实现步骤与代码修改

核心逻辑说明

你需要的执行链路是:S3存储桶新增.txt文件 → 触发Lambda → 读取TXT文件的实际文本内容 → 组装为HTML格式 → 调用put_object接口将HTML写入S3存储桶,后续直接访问该HTML文件即可展示TXT内容。
你搜索到的put_object代码是用于写入HTML文件到S3的核心方法,需要放在成功读取到TXT内容之后的逻辑位置。

完整修改后的代码

import json
import urllib.parse
import boto3

print('Loading function')

s3 = boto3.client('s3')
# 你也可以指定HTML存储到其他桶,替换为你的目标桶名即可
HTML_BUCKET_NAME = None # 为None时默认和TXT文件同桶

def lambda_handler(event, context):
    # 获取触发事件的桶和文件信息
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    
    # 过滤非TXT文件,避免误触发
    if not key.lower().endswith('.txt'):
        print(f"非TXT文件{key},跳过处理")
        return
    
    try:
        # 读取TXT文件内容
        response = s3.get_object(Bucket=bucket, Key=key)
        # 从Body流中读取实际文本内容,注意编码匹配你的TXT文件编码,默认用utf-8
        txt_content = response['Body'].read().decode('utf-8')
        
        # 组装HTML内容,你可以自定义样式
        html_content = f"""
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <meta charset="UTF-8">
            <title>TXT内容展示</title>
        </head>
        <body>
            <h2>上传的TXT文件内容为:</h2>
            <p>{txt_content}</p>
        </body>
        </html>
        """
        
        # 确定HTML存储的目标桶
        target_bucket = HTML_BUCKET_NAME if HTML_BUCKET_NAME else bucket
        # 写入HTML文件到S3,就是你搜索到的代码的正确使用方式
        s3.put_object(
            Bucket=target_bucket,
            Key='index.html', # 你也可以自定义文件名,比如用Key=key.rsplit('.',1)[0] + '.html'实现每个TXT对应单独HTML
            Body=html_content.encode('utf-8'),
            ContentType='text/html'
            # 如果需要公开访问HTML,可加以下参数
            # ACL='public-read'
        )
        
        print("HTML文件生成成功")
        return "success"
        
    except Exception as e:
        print(e)
        print(f'处理对象{key}失败,请确认桶{bucket}与Lambda在同一区域')
        raise e

额外配置要求

  • Lambda权限补充:你的Lambda执行角色需要添加S3写入权限,策略示例如下,替换为你的实际桶ARN即可:
{
    "Effect": "Allow",
    "Action": [
        "s3:PutObject"
    ],
    "Resource": "arn:aws:s3:::你的桶名/*"
}
  • 避免循环触发:如果HTML和TXT存储在同一个桶,需要在S3触发器配置中添加后缀过滤规则,仅让后缀为.txt的文件触发Lambda,避免写入HTML时再次触发Lambda造成循环。
  • 访问HTML:如果需要公网访问HTML,可开启S3桶的静态网站托管功能,或在put_object时添加ACL='public-read'参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:03