gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:42:40 24 4
gpt4 key购买 nike

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

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

这是有问题的图像模型。

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();

我相信我已经填写了区域、存储桶名称、 secret (随机安全字符串),甚至创建了一个安全存储在 .env 文件中的新 key 。

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

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

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

  • 阻止新的公共(public) ACL 和上传公共(public)对象:False
  • 删除通过公共(public) ACL 授予的公共(public)访问权限:False
  • 阻止新的公共(public)存储桶政策:正确
  • 如果存储桶具有公共(public)政策,则阻止公共(public)和跨账户访问:True

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

我找到了debug packagenode_modules/keystone/fields/types/file/FileType.js 中使用并启用它。我在尝试上传图像时收到以下调试消息。

$ DEBUG=keystone:fields:file node keystone.js

------------------------------------------------
KeystoneJS v4.0.0 started:
keystone-s3 is ready on http://0.0.0.0:3000
------------------------------------------------

GET /keystone/images/5bf2c27e05ba79178cd7d2be 200 17.446 ms
GET /keystone/api/images/5bf2c27e05ba79178cd7d2be?drilldown=true 304 3.528 ms
keystone:fields:file [Image.file] Validating input: upload:File-file-1001 +0ms
keystone:fields:file [Image.file] Validation result: true +1ms
keystone:fields:file [Image.file] Uploading file for item 5bf2c27e05ba79178cd7d2be: { fieldname: 'File-file-1001',
originalname: 'oof.PNG',
encoding: '7bit',
mimetype: 'image/png',
destination: 'C:\\Users\\Dylan\\AppData\\Local\\Temp',
filename: '42c161c1c36a84a244a2cf09d327afd4',
path:
'C:\\Users\\Dylan\\AppData\\Local\\Temp\\42c161c1c36a84a244a2cf09d327afd4',
size: 6684 } +0ms
POST /keystone/api/images/5bf2c27e05ba79178cd7d2be 500 225.027 ms

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

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

“InvalidAccessKeyId:您提供的 AWS 访问 key ID 在我们的记录中不存在。”

搜索继续。

最佳答案

我混淆了我的“ key ”和“ secret ”。

根据 keystone-storage-adapter-s3 package ,需要的是你的“ key ”和“ secret ”。由于缺乏 AWS 经验,并且有些缺乏 Web 开发经验,我认为 secret 是一个随机安全字符串(就像您签署 cookie 一样),而 key 是我的 secret key 。

错误

  • “key”: secret key
  • “secret”:随机安全 key 。

正确

  • “key”: key ID
  • “secret”: key 。

事实证明我错了。 “key”是我的 key ID,“secret”是我的 secret key 。在我的 .env 文件中正确设置这些内容允许我将文件上传到 S3 存储桶。

关于javascript - 使用 keystone-storage-adapter-s3 后出现字段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377387/

24 4 0
文章推荐: javascript - 根据 javascript 中