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

使用Postman向AWS S3上传图片时出现「Missing credentials in config」错误的求助

解决AWS S3上传时的"Missing credentials in config"错误

嘿,我看了你的代码和错误提示,马上就发现了几个关键问题,咱们一步步来搞定这个凭证缺失的问题:

1. 最致命的拼写错误

你在配置AWS凭证的时候犯了一个大小写错误:

AWS.config.update({
  accessKeyId:process.env.AWS_ACCESS_KEY ,
  secretAccesskey: process.env.AWS_SECRET_KEY, // 这里的K应该大写!
  region: process.env.AWS_BUCKET_REGION,
});

AWS SDK的配置参数是严格区分大小写的,secretAccesskey应该写成secretAccessKey(最后一个字母K大写)。这个拼写错误直接导致SDK无法识别你的密钥,自然就抛出了凭证缺失的错误。

2. 确认环境变量是否真的被加载

你用process.env来读取密钥,但要确保这些环境变量确实被Node.js进程获取到了:

  • 如果是本地开发,强烈推荐用dotenv包来加载.env文件里的变量。先安装它:
    npm install dotenv
    
    然后在代码的最顶部添加一行:
    require('dotenv').config();
    
  • 检查你的.env文件,确保变量名和代码里的完全一致(比如AWS_ACCESS_KEY、AWS_SECRET_KEY、AWS_BUCKET_REGION),别加多余的空格或者引号。

3. 更稳妥的AWS配置方式(可选)

其实AWS SDK支持自动读取本地配置文件,这样就不用在代码里硬写配置了:

  • 在你的用户目录下创建.aws/credentials文件(Linux/macOS是~/.aws/credentials,Windows是C:\Users\<你的用户名>\.aws\credentials),内容格式如下:
    [default]
    aws_access_key_id = 你的Access Key
    aws_secret_access_key = 你的Secret Key
    
  • 再创建.aws/config文件配置区域:
    [default]
    region = 你的Bucket区域(比如us-east-1)
    
    这样AWS SDK会自动读取这些配置,你可以删掉代码里的AWS.config.update部分,既省事又能避免拼写错误。

4. 优化错误处理避免服务器崩溃

你的代码里直接throw err,在Express中这样会导致整个服务器崩溃,建议改成返回错误响应:

s3.upload(params, (err, data) => {
  if (err) {
    return res.status(500).send({
      response_code: 500,
      response_message: "上传失败",
      error: err.message
    });
  }
  res.send({
    response_code: 200,
    response_message: "Success",
    response_data: data,
  });
});

修复后的完整代码

require('dotenv').config(); // 新增:加载环境变量
require("./config/database").connect();
const express = require("express");
const jwt = require("jsonwebtoken");
const fileUpload = require("express-fileupload");
var bcrypt = require("bcryptjs");
const app = express();
app.use(fileUpload());
var AWS = require("aws-sdk");

app.post("/images", async (req, res) => {
  // 修复了secretAccessKey的拼写错误
  AWS.config.update({
    accessKeyId: process.env.AWS_ACCESS_KEY,
    secretAccessKey: process.env.AWS_SECRET_KEY,
    region: process.env.AWS_BUCKET_REGION,
  });
  const s3 = new AWS.S3();
  const fileContent = Buffer.from(req.files.data.data, "binary");
  const params = {
    Bucket: "newawspracticeimage",
    Key: req.files.data.name,
    Body: fileContent,
  };
  s3.upload(params, (err, data) => {
    if (err) {
      return res.status(500).send({
        response_code: 500,
        response_message: "Upload failed",
        error: err.message
      });
    }
    res.send({
      response_code: 200,
      response_message: "Success",
      response_data: data,
    });
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:07:38