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

寻求AWS临时文件存储方案:实现类WeTransfer的10小时自动过期功能

AWS 10小时临时文件存储解决方案

针对你需要的「用户上传文件、10小时后自动删除、支持预链接下载」的需求,以下是几个可行的AWS原生方案,避开S3生命周期规则仅支持天级过期的限制:

方案1:S3 + Lambda + EventBridge(推荐,精确到分钟)

这是最贴合需求的托管式方案,无需维护服务器:

  • 上传流程:
    1. 用户上传文件到S3桶,触发S3上传事件,调用第一个Lambda函数。
    2. Lambda计算文件的过期时间(当前时间+10小时),给S3对象添加自定义元数据(比如x-amz-meta-expire-time)记录该时间。
    3. 用EventBridge创建一次性定时规则,设置在过期时间触发,目标为负责删除文件的第二个Lambda,规则中传递S3对象的桶名和键作为参数。
  • 删除流程:
    定时规则触发后,删除Lambda根据参数定位S3对象并删除,同时可清理对应的EventBridge规则避免冗余。
  • 下载实现:
    生成S3预签名URL时,设置ExpiresIn为文件剩余的有效秒数(比如10小时减去已过去的时间),确保链接在文件过期时同步失效。
  • 优势:完全托管,时间精度高(支持分钟级),和S3原生集成;无需担心服务器维护。
  • 注意事项:
    • 配置Lambda权限:允许读取S3元数据、创建EventBridge规则、删除S3对象。
    • 注意EventBridge的规则配额,一般场景下足够覆盖需求。

方案2:S3 + DynamoDB TTL + 定时Lambda扫描

适合文件数量极大的场景,批量处理过期文件:

  • 上传流程:
    1. 文件上传到S3后,将对象键、桶名、过期时间(当前时间+10小时)存入DynamoDB表,把过期时间设为DynamoDB的TTL字段(自动删除过期条目)。
    2. 可选:给S3对象添加元数据关联DynamoDB条目ID。
  • 删除流程:
    用EventBridge每小时触发一次Lambda,扫描DynamoDB中已过期的条目(或直接查询TTL已过期的记录),批量删除对应的S3对象。
  • 下载实现:
    生成预签名URL前,先查询DynamoDB确认文件未过期,再生成对应有效期的链接。
  • 优势:无需为每个文件创建单独的EventBridge规则,批量处理成本更低;DynamoDB自动清理过期记录,减少维护。
  • 注意事项:
    • 给DynamoDB表创建GSI按过期时间排序,避免全表扫描影响性能。
    • 批量删除S3文件时,处理好报错重试逻辑。

方案3:EFS + 定时清理脚本(适合需文件系统语义的场景)

如果你需要文件系统级的读写操作,可以用EFS:

  • 上传流程:
    将EFS挂载到EC2实例或支持EFS的Lambda,用户上传文件到指定目录,可在文件名中嵌入过期时间戳,或用数据库记录文件路径和过期时间。
  • 删除流程:
    在EC2上配置Cron任务,或用EventBridge触发Lambda,定期扫描目录,删除创建时间超过10小时的文件。
  • 下载实现:
    通过API网关+Lambda提供下载接口,验证文件未过期后返回文件内容,或生成临时访问链接。
  • 优势:支持文件系统语义,适合需要直接操作文件的场景。
  • 注意事项:
    • 需要维护EC2实例(或配置Lambda的EFS访问权限),运维成本略高。
    • EFS的存储和IO成本比S3高,需评估预算。

通用优化建议

  • 预签名URL生成时,严格限制有效期不超过文件剩余的10小时窗口,避免过期后链接仍可访问。
  • 上传时可对文件大小、类型做校验,避免恶意上传大文件占用存储。
  • 记录上传和下载日志,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:40:25