首页 > 解决方案 > 上传到 Amazon S3 会出现 403 错误 - 以下示例相册指南

问题描述

我正在尝试将简单图像上传到 S3 存储桶,403尝试上传时总是出错,但 list 和 createAlbum 方法有效。

我已遵循本指南:从浏览器将照片上传到 Amazon S3 - 适用于 JavaScript 的 AWS 开发工具包

由于教程的上传对我不起作用,我尝试使用该S3.upload方法但没有成功,如下所示:

    S3.upload({
      Key: 'my-album/aqui.png',
      Body: file,
      ACL: 'public-read',
      Bucket: SOUNDS_BUCKET_NAME
      }, function(err, data) {
        if(err) {
          alert('fail')
        } else {
          alert('Successfully Uploaded!');
        }
      }
    );

我相信这个错误是我的 S3 或身份池上的配置,但配置与教程相同:

CORS

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

认知: 在此处输入图像描述

S3: 在此处输入图像描述

我究竟做错了什么?

标签: javascriptamazon-web-servicesamazon-s3

解决方案


这是将文件上传到 S3 的 Node.js 代码。

设置环境

AWS 凭证

要开始使用,您需要先生成AWS 安全密钥访问凭证。为此,请登录您的AWS 管理控制台

点击您的用户名:

在此处输入图像描述

选择访问密钥->创建新访问密钥

在此处输入图像描述

之后,您可以从此窗口复制访问密钥 ID秘密访问密钥.CSV,也可以将其下载为文件:

在此处输入图像描述

创建 S3 存储桶

现在让我们创建一个具有适当访问权限的 AWS S3 存储桶。我们可以使用 AWS 管理控制台或使用 Node.js 来做到这一点。

要使用管理控制台创建 S3 存储桶,请从服务菜单中选择 S3 服务:

在此处输入图像描述

选择“创建存储桶”并输入您的存储桶的名称和您要托管存储桶的区域。如果您已经知道大多数用户来自哪个地区,那么明智的做法是选择尽可能接近他们所在地区的地区。这将确保来自服务器的文件将在更优化的时间范围内提供服务。

您为存储桶选择的名称应该是所有 AWS 用户中唯一的名称,因此如果该名称不可用,请尝试使用新名称:

在此处输入图像描述

遵循向导并根据您的要求配置权限和其他设置。

要使用 Node.js 创建存储桶,我们首先必须设置我们的开发环境。

开发环境

通过配置一个新的 Node.js 项目开始我们的示例:

$ npm init

要开始在 Node.js 中使用任何 AWS 云服务,我们必须安装AWS SDK(系统开发工具包)。

使用您喜欢的包管理器安装它 - 我们将使用npm

$ npm i --save aws-sdk

执行

创建 S3 存储桶

如果您已经手动创建了存储桶,则可以跳过此部分。但如果没有,让我们create-bucket.js在项目目录中创建一个文件。

导入aws-sdk库以访问您的 S3 存储桶:

const AWS = require('aws-sdk');

现在,让我们定义三个常量来存储IDSECRETBUCKET_NAME。这些用于识别和访问我们的存储桶:

// Enter copied or downloaded access ID and secret key here
const ID = '';
const SECRET = '';

// The name of the bucket that you have created
const BUCKET_NAME = 'test-bucket';

现在我们需要通过传递我们的访问密钥来初始化 S3 接口:

const s3 = new AWS.S3({
    accessKeyId: ID,
    secretAccessKey: SECRET
});

来源:使用 Node.js 将文件上传到 AWS S3


推荐阅读