使用keystone-storage-adapter-s3后出现字段错误

时间:2018-11-19 15:03:39

标签: javascript amazon-s3 keystonejs

我正在寻求帮助,以调试通过Keystone CMS上载图像时浏览器弹出的消息“字段错误”。 enter image description here

我正在使用npm package keystone-storage-adapter-s3。在某些情况下,我尝试将图像上传到AWS S3存储桶,然后使用Keystone CMS将其作为网站内容的一部分进行检索。我对AWS S3还是陌生的,但是可以尝试。

这是有问题的图像模型。

name: column[0]
category: concat(' ', column[18], column[19])
age: split(column[3], '/', 0)

我相信我已经填写了区域,存储区名称,机密(随机安全字符串),甚至创建了一个新密钥,该密钥也安全地存储在.env文件中。

这是我在浏览器控制台中收到的错误。

const keystone = require('keystone');
const Types = keystone.Field.Types;

const Image = new keystone.List('Image');

const storage = new keystone.Storage({
    adapter: require('keystone-storage-adapter-s3'),
    s3: {
        key: process.env.S3_KEY, // required; defaults to process.env.S3_KEY
        secret: process.env.S3_SECRET, // required; defaults to process.env.S3_SECRET
        bucket: process.env.S3_BUCKET, // required; defaults to process.env.S3_BUCKET
        region: process.env.S3_REGION, // optional; defaults to process.env.S3_REGION, or if that's not specified, us-east-1
        uploadParams: { // optional; add S3 upload params; see below for details
          ACL: 'public-read',
        },
    },
    schema: {
        bucket: true, // optional; store the bucket the file was uploaded to in your db
        etag: true, // optional; store the etag for the resource
        path: true, // optional; store the path of the file in your db
        url: true, // optional; generate & store a public URL
    },
});

Image.add({
    name: { type: String },
    file: { type: Types.File, storage: storage },
});

Image.register();

这些是我的S3存储桶的权限设置。

  • 阻止新的公共ACL并上传公共对象:False
  • 删除通过公共ACL授予的公共访问权限:False
  • 阻止新的公共存储桶策略:True
  • 如果存储桶具有公共策略,则阻止公共和跨帐户访问:True

这些是类似的问题,但我相信与Keystone以前的Knox实现有关。

我发现packages.js:33 POST http://localhost:3000/keystone/api/images/5bf2c27e05ba79178cd7d2be 500 (Internal Server Error) a @ packages.js:33 i @ packages.js:33 List.updateItem @ admin.js:22863 updateItem @ admin.js:15021 r @ packages.js:16 a @ packages.js:14 s @ packages.js:14 d @ packages.js:14 v @ packages.js:14 r @ packages.js:17 processEventQueue @ packages.js:14 r @ packages.js:16 handleTopLevel @ packages.js:16 i @ packages.js:16 perform @ packages.js:17 batchedUpdates @ packages.js:16 i @ packages.js:16 dispatchEvent @ packages.js:16 中正在使用debug package并将其启用。尝试上传图像时,我收到以下调试消息。

node_modules/keystone/fields/types/file/FileType.js

此消息看起来很有希望,因此我将继续浏览以查看是否可以调试更多信息。

编辑:进步!我在Keystone软件包中搜索了“字段错误”,并找到了设置错误消息的位置。对该位置进行调试发现了另一个错误。

“ InvalidAccessKeyId:您提供的AWS Access Key ID在我们的记录中不存在。”

搜索继续。

1 个答案:

答案 0 :(得分:1)

我正在混淆我的“密钥”和“秘密”。

根据keystone-storage-adapter-s3 package,要求输入您的“密钥”和“秘密”。由于对AWS缺乏经验,有些人对Web开发没有经验,所以我认为这个秘密是一个随机的安全字符串(就像您将使用cookie签名一样),并且密钥是我的秘密密钥。

错误

  • “密钥”:秘密密钥
  • “秘密”:随机安全密钥。

正确

  • “密钥”:密钥ID
  • “秘密”:秘密密钥。

原来我错了。 “密钥”是我的密钥ID,“秘密”是我的秘密密钥。正确设置.env文件中的内容,使我可以将文件上传到S3存储桶。