首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS S3 PresignedPost在本地工作,但在使用ERR_CONNECTION_RESET的生产中失败

AWS S3 PresignedPost在本地工作,但在使用ERR_CONNECTION_RESET的生产中失败
EN

Stack Overflow用户
提问于 2022-03-24 03:27:31
回答 1查看 239关注 0票数 0

我有一个后端lambda函数,它使用下面的代码创建预签名的post url,这很好,可以按照生产和本地的计划返回url。

代码语言:javascript
运行
复制
router.post("/file_upload", async (req, res) => {
try {
var name = `${uuidv4()}`;
var params = {
    Bucket: process.env.S3_BUCKET,
    Fields: {
        key: name, // File name you want to save as in S3,
        //acl: "public-read"
    },
    Expires: 3600,
    Conditions:[
        ["content-length-range", 0, 52428800]
    ]
};

s3.createPresignedPost(params, (err, data) => {
    if(err) {
      throw err;
    }
    Object.assign(data, { name });
    console.log(data);
    res.send(data);
});
} catch (error) {
res.status(500);
res.end(`Error: ${error}`);
console.log(error);
}
});

但是,当下面的代码对这个url执行post请求时,我收到了一个错误ERR_CONNECTION_RESET,每次都会发生这样的情况:

代码语言:javascript
运行
复制
let results = await triggerAWSS3("file_upload", name);
if (results && results.url && results.fields) {
  name = results.name;
  let form = new FormData();
  let keys = Object.keys(results.fields);
  await Promise.all(keys.map((key) => {
    form.append(key, results.fields[key]);
    return true;
  }));
  form.append('file', file);
  let response = '';
  try {
    //This line generates the error
    response = await Axios.post(results.url, form, { headers: { 'content-type': 'multipart/form-data' } });
    console.log(response);
  } catch (error) {
    console.log(error);
  }

我有一个公共桶政策,如下所示:

代码语言:javascript
运行
复制
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
    {
        "Sid": "Allow get requests originating from www.example.com and example.com.",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": "arn:aws:s3:::example-s3-bucket/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "https://www.example.com/*",
                    "https://example.com/*",
                    "https://localhost:3000/*"
                ]
            }
        }
    }
]
}

如果有人能帮我找出为什么这不起作用的话,那就太棒了,因为我已经尝试了很多不同的方法来解决这个问题,但是没有什么奏效的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-29 03:50:28

因此,经过几天的故障排除后,我发现S3桶被配置到了错误的区域。

代码语言:javascript
运行
复制
const AWS = require('aws-sdk');
const { v4: uuidv4 } = require('uuid');
const s3 = new AWS.S3();
AWS.config.update({ signatureVersion: 'v4',
                    accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY,   
                    secretAccessKey: process.env.REACT_APP_AWS_SECRET_KEY, 
                    region: process.env.REACT_APP_AWS_REGION });

我将配置update语句移到S3变量的定义之上,从而修正了它。一个愚蠢的错误,但也许我可以在未来节省别人的时间。

代码语言:javascript
运行
复制
const AWS = require('aws-sdk');
const { v4: uuidv4 } = require('uuid');
AWS.config.update({ signatureVersion: 'v4',
                    accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY,   
                    secretAccessKey: process.env.REACT_APP_AWS_SECRET_KEY, 
                    region: process.env.REACT_APP_AWS_REGION });
const s3 = new AWS.S3();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71596706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档