我正在寻求帮助,以调试通过Keystone CMS上载图像时浏览器弹出的消息“字段错误”。
我正在使用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存储桶的权限设置。
这些是类似的问题,但我相信与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在我们的记录中不存在。”
搜索继续。
答案 0 :(得分:1)
我正在混淆我的“密钥”和“秘密”。
根据keystone-storage-adapter-s3 package,要求输入您的“密钥”和“秘密”。由于对AWS缺乏经验,有些人对Web开发没有经验,所以我认为这个秘密是一个随机的安全字符串(就像您将使用cookie签名一样),并且密钥是我的秘密密钥。
错误
正确
原来我错了。 “密钥”是我的密钥ID,“秘密”是我的秘密密钥。正确设置.env文件中的内容,使我可以将文件上传到S3存储桶。