【问题标题】:aws S3 bucket: Internal Server Error 500 on POST file upload from browseraws S3 存储桶:从浏览器上传 POST 文件时出现内部服务器错误 500
【发布时间】:2020-02-27 16:01:58
【问题描述】:

在将 POST 表单数据上传到 s3 存储桶时,我收到 <Code>InternalError</Code><Message>We encountered an internal error. Please try again.</Message>

S3 配置:

const attachmentBucket = new Bucket(this, 'caS3Bucket', {
  bucketName: environmentName + '.caattachments',
  cors: [{
    allowedMethods: [HttpMethods.GET, HttpMethods.POST],
    allowedOrigins: ['*'],
    allowedHeaders: ['*'],
    maxAge: 3000
  } as CorsRule]
} as BucketProps);

通过 lambda 预签名上传网址:

const params = {
  Bucket: process.env.S3_BUCKET!.split(':')[5],
  Fields: {
    key: payload.path,
    acl: 'public-read'
  },
  Expires: 3600
};

const postData = await new Promise(resolve => {
  s3.createPresignedPost(params, (err, data) => {
    resolve(data);
  });
}) as AWS.S3.PresignedPost;

我将 postData.fields 中的所有参数附加到文件的输入表单中。有什么办法可以调试吗?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda aws-cdk


    【解决方案1】:

    问题是表单缺少“政策”字段。我希望 aws 错误更具描述性。最终的工作表单字段如下所示:

    const formData: FormData = new FormData();
    
    formData.append('key', uploadData.fields.key);
    formData.append('acl', uploadData.fields.acl);
    formData.append('bucket', uploadData.fields.bucket);
    formData.append('X-Amz-Algorithm', uploadData.fields.algorithm);
    formData.append('X-Amz-Credential', uploadData.fields.credential);
    formData.append('X-Amz-Date', uploadData.fields.date);
    formData.append('X-Amz-Security-Token', uploadData.fields.token);
    formData.append('Policy', uploadData.fields.policy);
    formData.append('X-Amz-Signature', uploadData.fields.signature);
    formData.append('file', file, file.name);
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 2019-12-13
      • 1970-01-01
      • 2014-01-04
      • 2014-04-12
      • 2011-07-14
      • 2019-10-23
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多