【问题标题】:Strapi- Having issues with making AWS S3 my file upload providerStrapi- 将 AWS S3 设为我的文件上传提供商时遇到问题
【发布时间】:2022-01-18 10:17:33
【问题描述】:

我正在按照 Strapi 网站上的说明进行操作:https://strapi.io/documentation/v3.x/plugins/upload.html#using-a-provider

这是我的 plugin.js 文件,位于 ./config/plugins.js

module.exports = ({ env }) => ({
    upload: {
      provider: 'aws-s3',
      providerOptions: {
        accessKeyId: 'id',
        secretAccessKey: 'secret',
        region: 'us-east-1',
        params: {
          Bucket: 'bucket',
        },
      },
    }
  });

我安装了strapi-provider-upload-aws-s3:

 "dependencies": {
    "knex": "<0.20.0",
    "pg": "^8.3.2",
    "sqlite3": "^5.0.0",
    "strapi": "3.1.4",
    "strapi-admin": "3.1.4",
    "strapi-connector-bookshelf": "3.1.4",
    "strapi-plugin-content-manager": "3.1.4",
    "strapi-plugin-content-type-builder": "3.1.4",
    "strapi-plugin-email": "3.1.4",
    "strapi-plugin-upload": "3.1.4",
    "strapi-plugin-users-permissions": "3.1.4",
    "strapi-provider-upload-aws-s3": "^3.1.4",
    "strapi-utils": "3.1.4"
  },

但是当我转到本地管理页面然后转到插件时,我在媒体库插件中看不到允许我更改设置的 cog。

我很困在这里,所以我们将不胜感激。谢谢!

【问题讨论】:

  • @grohjy 是的,这确实有效!我仍然看不到媒体库旁边的齿轮,但是当我上传图片时,它会转到我的云端帐户!我真的希望他们尽快更新他们的文档,我看到很多人都有同样的问题。链接:medium.com/@kwinten.yc.li/…

标签: javascript node.js amazon-s3 strapi


【解决方案1】:

对于 AWS,使用以下代码更新 ~/extensions/upload/config/settings.json 文件以使其工作:

{  
    "provider": "aws-s3",  
    "providerOptions": {
      "accessKeyId": "keyId",
      "secretAccessKey": "key",
      "region": "region",
      "params": {
        "Bucket": "bucket"
      }
   }
}

【讨论】:

    【解决方案2】:

    在路径 ~/extensions/upload/config/settings.json 中粘贴以下内容对我有用:

    {  
        "provider": "cloudinary",  
        "providerOptions": {
          "cloud_name": "Cloud Name",
          "api_key": "API Key",
          "api_secret": "Secret Key"  
       }
    }
    

    我仍然没有看到媒体库旁边的齿轮,但是当我上传图片时,我会在我的 cloudinary 帐户中看到它。我真的希望他们尽快更新他们的文档。这给我带来了很多麻烦,我也看到其他一些人也遇到了这个问题。

    【讨论】:

      【解决方案3】:

      使这些更改对我有用,这是使用 env 变量而不是硬编码值的最佳方式: 编辑文件 config/plugin.js:

      module.exports = ({ env }) => ({
      upload: {
        provider: 'aws-s3'
        },
      });
      

      创建文件 extensions/upload/config/settings.js:

      module.exports = {
      provider: 'aws-s3',
      providerOptions: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_ACCESS_SECRET,
        region: process.env.AWS_REGION,
        params: {
          Bucket: process.env.AWS_BUCKET_NAME,
        },
      },
      };
      

      【讨论】:

        【解决方案4】:

        您不应该在 Strapi Admin 上更改有关媒体库的第 3 方提供商的任何设置。使用plugins.js 文件配置提供程序。

        在那里进行配置(从 AWS 复制您的 accessKeyIdsecretAccessKey 等),然后从该点进行的任何上传都应上传到 AWS 上您指定的 S3 存储桶。

        旁注:直接在代码中存储像secretAccessKey 这样的私钥不是一个好主意,请确保为此使用环境变量。

        【讨论】:

          【解决方案5】:

          Strapi 上传插件文档有错误。 https://docs.strapi.io/developer-docs/latest/plugins/upload.html#enabling-the-provider

          按照他们文档的配置代码,我没有正常的 S3 上传;它总是会在本地上传。

          现在我的 S3 提供程序配置如下所示。本质上,您只需删除他们的文档指定的 config: { } 子包装器;好像不需要。

          这样做,我能够通过 Strapi Dashboard(插件/媒体库)上传媒体文件,这些文件将出现在我的 S3 中。它工作的另一个指标是它比本地上传需要更长的时间。上传 api 列表路由有效,并将我的文件 URL 显示为完整的 S3 url。

          config/plugins.js

          upload: {
              provider: 'aws-s3',
              providerOptions: {
                  accessKeyId: env('AWS_ACCESS_KEY_ID'),
                  secretAccessKey: env('AWS_ACCESS_SECRET'),
                  region:  env('AWS_REGION'),
                  params: {
                      Bucket: env('AWS_BUCKET')
                  }
              }
          }
          

          【讨论】:

          • 以上配置对Strapi v3有效,而链接中的配置与Strapi v4兼容。因此,您很可能正在尝试使用 v4 的配置为 Strapi v3 配置插件。
          猜你喜欢
          • 1970-01-01
          • 2022-08-13
          • 2015-04-19
          • 2011-02-14
          • 2020-05-09
          • 1970-01-01
          • 2013-08-11
          • 1970-01-01
          相关资源
          最近更新 更多