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

如何通过AppSync VTL将Base64对象上传至S3?

实现AppSync通过HTTP数据源向S3存储Base64对象

核心结论

可以直接通过AppSync对接S3存储Base64格式对象,借助VTL模板将请求转换为符合S3 PutObject API要求的格式即可。

步骤分解

1. 确认Schema配置

你已有的Mutation定义可直接使用:

Mutation uploadFile(base64: String): Response

确保Response类型包含必要返回字段(如success: Boolean、message: String),方便返回上传结果。

2. 配置AppSync解析器

为uploadFileMutation绑定已创建的S3 HTTP数据源,编写以下两类VTL模板:

请求映射模板(VTL)

将传入的Base64字符串解码为二进制,同时指定S3存储桶、对象键等参数:

#set($bucketName = "你的S3存储桶名称")
#set($objectKey = "uploads/${util.autoId()}.jpg") # 自定义对象键,用自动ID避免重复

{
  "version": "2018-05-29",
  "method": "PUT",
  "resourcePath": "/${bucketName}/${objectKey}",
  "params": {
    "headers": {
      "Content-Type": "image/jpeg", # 根据实际文件类型修改,如image/png、application/pdf
      "Content-Encoding": "base64"
    },
    "body": $util.base64Decode($ctx.args.base64)
  }
}
  • objectKey可根据业务需求调整,比如结合用户ID、时间戳生成唯一标识
  • $util.base64Decode负责将Base64字符串转为S3可接收的二进制数据

响应映射模板(VTL)

处理S3的响应结果,返回自定义的Response结构:

{
  "data": {
    "success": $ctx.result.statusCode == 200 ? true : false,
    "message": $ctx.result.statusCode == 200 ? "文件上传成功" : "上传失败: ${ctx.result.statusCode}",
    "objectKey": "${objectKey}" # 可选,返回存储的对象键供后续使用
  }
}

3. 权限配置

确保AppSync绑定的IAM角色拥有S3的PutObject权限,示例策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::你的S3存储桶名称/*"
    }
  ]
}

4. 测试调用

通过AppSync控制台的查询编辑器发起测试:

mutation {
  uploadFile(base64: "你的Base64文件字符串") {
    success
    message
    objectKey
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:48:11