如何在前端通过文件名访问S3中Lambda生成的视频缩略图?
解决S3缩略图前端访问及按文件名获取的问题
1. 先确认缩略图的命名规则
首先得搞清楚你的Lambda生成缩略图时的命名逻辑——这是后续获取文件的核心。你可以直接登录AWS控制台,打开输出存储桶,找到已生成的缩略图,查看它的文件路径(Key)。常见的命名方式有几种:
- 原文件名+序号/尺寸后缀:比如
dfdf_thumbnail_1.jpg、dfdf_small.jpg - 原文件名作为子目录:比如
dfdf/thumbnail_1.jpg - 保留原文件后缀:比如
vijay.treaser.ve_thumbnail_1.jpg(如果原文件带后缀的话)
2. 前端访问S3缩略图的两种方案
方案一:公开访问(适合允许公开的场景)
如果你的缩略图可以公开访问,给输出桶的缩略图设置公开可读权限,或者添加Bucket Policy允许匿名用户读取。之后前端直接用S3的公开URL访问,格式为:
https://<输出桶名称>.s3.<AWS区域>.amazonaws.com/<缩略图Key>
举个例子:假设输出桶是video-thumbnails-bucket,区域是ap-southeast-1,缩略图Key是dfdf_thumbnail_1.jpg,那么访问URL就是:https://video-thumbnails-bucket.s3.ap-southeast-1.amazonaws.com/dfdf_thumbnail_1.jpg
方案二:预签名URL(适合私有桶场景)
如果存储桶是私有(不允许公开访问),就需要通过后端生成预签名URL给前端使用。预签名URL是临时有效的访问链接,你可以用AWS SDK实现生成逻辑,比如Python代码示例:
import boto3 from botocore.config import Config # 初始化S3客户端 s3_client = boto3.client('s3', config=Config(signature_version='s3v4')) def get_thumbnail_presigned_urls(bucket_name, original_filename): # 根据你的Lambda命名规则构造3张缩略图的Key thumbnail_keys = [ f"{original_filename}_thumbnail_1.jpg", f"{original_filename}_thumbnail_2.jpg", f"{original_filename}_thumbnail_3.jpg" ] # 生成每张图的预签名URL,有效期1小时(3600秒) return [ s3_client.generate_presigned_url( 'get_object', Params={'Bucket': bucket_name, 'Key': key}, ExpiresIn=3600 ) for key in thumbnail_keys ]
前端调用你的后端接口,传入原文件名(比如dfdf),后端返回3个预签名URL,前端直接用这些URL加载图片即可。
3. 针对你的文件名构造缩略图路径
假设你的Lambda用的是{原文件名}_thumbnail_{序号}.jpg的命名规则,那你给出的文件名对应的缩略图Key分别是:
dfdf:dfdf_thumbnail_1.jpg、dfdf_thumbnail_2.jpg、dfdf_thumbnail_3.jpgtreasersonthing:treasersonthing_thumbnail_1.jpg、treasersonthing_thumbnail_2.jpg、treasersonthing_thumbnail_3.jpgvijay.treaser.ve:注意原文件名带后缀,需确认Lambda是否保留后缀,可能是vijay.treaser.ve_thumbnail_1.jpg或vijay.treaser_thumbnail_1.jpg,以S3桶中实际生成的文件为准vollyball:vollyball_thumbnail_1.jpg、vollyball_thumbnail_2.jpg、vollyball_thumbnail_3.jpg
内容的提问来源于stack exchange,提问作者Venkatesh
相关产品推荐
相关产品推荐

