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

通过静态S3网站结合Lambda与API Gateway上传文件时返回POST 400 bad request

S3静态页结合API Gateway、Lambda实现文件上传返回POST 400错误解决步骤
  • 优先核对入参字段名匹配问题
    你上传逻辑的POST请求里传的字段是FileName,大部分同场景实现里Lambda侧要求的上传对象字段名和下载逻辑保持一致,用的是ObjectName,字段名不匹配会直接触发API网关或Lambda的入参校验规则,返回400错误。可以先修改上传请求的参数,将FileName替换为ObjectName测试。
  • 清理JSON序列化的无效尾逗号
    你的两段JSON.stringify的入参对象里,最后一个键值对末尾都多了多余的逗号,部分严格的JSON解析器会将带尾逗号的序列化结果判定为无效格式,直接返回400。需要删掉两个请求参数里最后一个属性后的逗号。
  • 核对API网关CORS配置
    确认API Gateway的prod阶段已经开启CORS配置,允许来自你的S3静态页域名的POST请求,同时允许Content-Type请求头,跨域规则配置错误也会触发400报错。
  • 校验入参合法性与权限
    确认你页面输入的BucketName是Lambda角色有权限操作的桶名,没有拼写错误、多余空格;同时确认下拉框选中的methodType值为putObject,如果传了不支持的操作类型,Lambda无对应处理逻辑也会返回400。

修正后的代码片段参考

/*
GET对象按钮触发的函数
图片会自动加载到底部div,普通文件会显示空图标(可后续优化)
*/
$(document).ready(function() {
    $("#UrlSignerBtnId").click(function() {
        $.ajax({
            url: 'https://ze451btvv2.execute-api.eu-west-2.amazonaws.com/prod',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({
                "BucketName": $('#BucketNameId').val(),
                "ObjectName": $('#ObjectNameId').val(),
                "methodType": $('#methodTypeId option:selected').attr('value')
            }),
            dataType: "json",
            //beforeSend: function(){ $( '#loader' ).show();},
            success: function(res) {
                $("#urlTextId").html("你的<a href=" + res.PreSignedUrl + ">预签名URL</a>将在" + res.ExpiresIn +"秒后过期");
                $("#SignedUrlId").html("<img src='" + res.PreSignedUrl + "'>");
                $("#div-obj-holderId").show();
            },
            error: function(e) {
                $("#urlTextId").html("无法获取对象,请检查对象键名是否正确");
                $("#SignedUrlId").html("<i>"+ e.responseText + "</i>");
                $("#div-obj-holderId").show();
            },
            // complete: function() { $('#loader').hide(); }
        });
    });
});

/*
上传对象按钮触发的函数
获取预签名上传URL后触发上传逻辑
*/
$(document).ready(function() {
    $("#ObjectUploadBtnId").click(function() {
        $.ajax({
            url: 'https://ze451btvv2.execute-api.eu-west-2.amazonaws.com/prod',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({
                "BucketName": $('#BucketNameId').val(),
                "methodType": $('#methodTypeId option:selected').attr('value'),
                "ObjectName": $('#FileNameId').val()
            }),
            dataType: "json",
            //beforeSend: function(){ $( '#loader' ).show();},
            success: function(res) {
                uploadFile(res, res.url);
            },
            error: function(e) {
                $("#urlTextId").html("获取预签名上传URL失败:" + e.responseText);
                $("#SignedUrlId").html("");
                $("#div-obj-holderId").show();
            },
            complete: function() {
                $('#loader').hide();
            }
        });
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:36:03