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

NextJS部署Github Pages后无法上传图片至AWS S3(报405错误)

问题描述

本地环境下NextJS应用可正常上传文件至AWS S3,但部署到Github Pages后,远程上传时出现405 POST错误。已配置的CORS和存储桶策略如下:

CORS配置

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "GET",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag"
        ]
    }
]

存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxx",
                "arn:aws:s3:::xxx/*"
            ]
        }
    ]
}
可能的原因及解决方案
  • 存储桶静态网站托管拦截POST请求:若S3存储桶开启了静态网站托管,其提供的端点仅支持GET/HEAD请求,POST请求会直接返回405。检查上传请求的目标URL,确保使用S3的API端点(格式为https://<bucket-name>.s3.<region>.amazonaws.com),而非静态网站托管的URL(通常为https://<bucket-name>.s3-website-<region>.amazonaws.com)。
  • CORS配置未生效:AWS S3的CORS配置修改后可能存在缓存延迟,尝试重新保存CORS配置,等待数分钟后再测试上传功能。
  • 上传请求方式错误:前端直接上传到S3时,建议使用预签名PUT URL而非直接POST。POST上传到S3需要构造包含key、policy、signature等特定字段的表单,若字段缺失或格式错误会返回405。本地环境可能依赖后端生成预签名URL,但Github Pages是静态托管,需确保前端能通过其他方式(如AWS Lambda等无服务器服务)正确获取预签名URL。
  • 请求目标地址错误:检查部署后的应用是否误将上传请求发送到Github Pages域名(而非S3端点),静态托管服务器不处理POST请求,会直接返回405错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:07:18