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

AWS Lambda生成S3预签名POST后,找不到文件上传URL求解答

解答:预签名POST的上传URL说明及代码优化

核心结论

你返回结果里的url字段就是用于文件上传的POST地址:https://s3.eu-west-2.amazonaws.com/xxx。预签名POST的结构本身就是这样:

  • url:S3接收表单上传的端点地址
  • fields:上传时必须一起提交的签名验证字段(包含key、Policy、签名等核心验证信息)

代码优化建议

你的Lambda功能可以正常生成预签名POST,但有几个需要修正的细节:

  1. 禁止硬编码AWS密钥:当前代码直接写入accessKeyId和secretAccessKey,存在严重安全风险。正确做法是给Lambda函数配置具备S3权限的IAM角色,AWS SDK会自动从环境变量获取凭证。
  2. 修正Expires注释错误:代码注释标注为10分钟,但60 * 60是3600秒(1小时),注释与实际过期时间不符。
  3. 规范请求参数获取方式:如果Lambda通过API Gateway触发,fileName通常嵌套在event.body中(需先解析JSON),而非直接从event根节点读取,示例修改如下:
// 适配API Gateway触发场景,解析请求体
const requestBody = JSON.parse(event.body);
const fileName = requestBody.fileName;

上传使用示例

拿到返回的url和fields后,可通过curl发起POST上传请求:

curl -X POST https://s3.eu-west-2.amazonaws.com/xxx \
  -F key="upload/yasin-test-aaa.mp4" \
  -F bucket="xxx" \
  -F X-Amz-Algorithm="AWS4-HMAC-SHA256" \
  -F X-Amz-Credential="AKIA4VX7VVP3LMLE3CHF/20240520/eu-west-2/s3/aws4_request" \
  -F X-Amz-Date="20240520T173547Z" \
  -F Policy="eyJleHBpcmF0aW9uIjoiMjAyNC0wNS0yMFQxODozNTo0N1oiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDczNzQxODI0XSx7ImtleSI6InVwbG9hZC95b3J1bS1yZXNpbWxlcmkveWFzaW4tdGVzdC1hYWEubXA0In0seyJidWNrZXQiOiJjZG4udG9uem8uY29tLnRyIn0seyJYLUFtei1BbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJYLUFtei1DcmVkZW50aWFsIjoiQUtJQTRWWDdWVlAzTE1MRTNDSEYvMjAyNDA1MjAvZXUtd2VzdC0yL3MzL2F3czRfcmVxdWVzdCJ9LHsiWC1BbXotRGF0ZSI6IjIwMjQwNTIwVDE3MzU0N1oifV19" \
  -F X-Amz-Signature="3a8372b714f7327de2aef6076210660f51180b077fc960ae7a7179449529d52e" \
  -F file=@/path/to/your/yasin-test-aaa.mp4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:19:57