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

使用evaporate.js直传S3遇403错误,签名问题求助

解决Evaporate.js上传AWS S3时的403签名错误

我之前也踩过类似的坑,结合你给出的代码,咱们一步步排查和解决这个403签名问题:

1. 先排查AWS基础配置问题

  • 首先确认你的AWS Access Key和Secret Key完全正确,没有拼写错误、多余空格。另外,对应的IAM用户必须拥有S3上传权限,至少要包含s3:PutObject权限;同时检查Bucket的CORS配置,要允许你的域名发起POST、PUT请求,Origin设置要匹配你的网站域名。
  • 如果Bucket不在默认的us-east-1区域,一定要在Evaporate初始化时指定正确的region参数,否则签名会因为区域不匹配失败。

2. 修正签名脚本的潜在问题

你的Signature.php有几个容易忽略的细节需要调整:

<?php
// 强制设置UTC时区,AWS签名验证对时间一致性要求极高
date_default_timezone_set('UTC');
// 清空输出缓冲区,避免PHP的警告、空格等多余内容污染签名结果
ob_clean();

$to_sign = $_GET['to_sign'];
$secret = '你的AWS_SECRET_KEY';

// 增加参数校验,避免空值导致的错误
if (empty($to_sign) || empty($secret)) {
    http_response_code(400);
    echo "Invalid request parameters";
    exit;
}

$hmac_sha1 = hash_hmac('sha1', $to_sign, $secret, true);
$signature = base64_encode($hmac_sha1);
echo $signature;
exit;
?>
  • 重点:确保服务器返回的只有签名字符串,没有任何额外输出(比如PHP的错误提示、HTML标签),这些都会导致AWS验证签名失败。
  • 可以在浏览器开发者工具的Network面板里,查看向Signature.php发送的请求,确认to_sign参数完整,且返回的签名没有多余字符。

3. 完善Evaporate.js的初始化配置

你给出的上传函数参数不全,补充必要配置后再测试:

function largeFileUPload(file) {
    var ins = new Evaporate({
        signerUrl: './includes/s3-signature.php',
        aws_key: "你的AWS_ACCESS_KEY",
        bucket: "你的S3 Bucket名称",
        region: "your-bucket-region", // 比如 'us-west-2',必须和Bucket实际区域一致
        ssl: true, // 如果你的网站是HTTPS协议,务必开启
        logging: true, // 开启日志,方便调试过程中查看详细请求信息
        computeContentMd5: true // 可选,有助于AWS验证文件完整性
    });

    ins.add({
        name: file.name,
        file: file,
        progress: function(progress) {
            console.log("上传进度: " + Math.round(progress*100) + "%");
        },
        complete: function(xhr, awsKey) {
            console.log("上传完成! 文件路径: " + awsKey);
        },
        error: function(msg) {
            console.error("上传错误: " + msg);
        }
    });
}

4. 额外调试技巧

  • 打开浏览器开发者工具的Network标签,查看向S3发送的请求,403响应的Body里通常会有AWS给出的具体错误原因(比如SignatureDoesNotMatch、AccessDenied),根据提示精准排查。
  • 检查服务器时间:如果你的服务器时间和AWS服务器时间差超过5分钟,签名会直接验证失败,确保服务器时间同步准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:37