Keystone JS 是一个用于构建数据库驱动的网站、应用和 API 的 Node.js 框架。它提供了强大的数据模型定义和管理界面。S3(Simple Storage Service)是对象存储服务,用于存储和检索任意数量的数据。
在 Keystone JS 中,可以通过自定义字段类型或使用插件来处理 S3 对象数组。以下是一个简单的示例,展示如何定义一个字段来存储 S3 对象的 URL 数组。
const { Text, Relationship } = require('@keystonejs/fields');
const AWS = require('aws-sdk');
// 配置 AWS SDK
AWS.config.update({ region: 'your-region' });
const s3 = new AWS.S3();
module.exports = {
fields: {
images: {
type: Text,
isIndexed: 'unique',
adapter: new Text({
// 自定义解析器
parse: (value) => value.split(',').map(url => url.trim()),
format: (urls) => urls.join(', '),
}),
hooks: {
async resolveInput({ resolvedData, context }) {
if (resolvedData.images) {
// 这里可以添加上传到 S3 的逻辑
const uploadedUrls = await Promise.all(
resolvedData.images.map(async (file) => {
const params = {
Bucket: 'your-bucket-name',
Key: file.name,
Body: file.data,
};
const data = await s3.upload(params).promise();
return data.Location;
})
);
return uploadedUrls;
}
return resolvedData.images;
},
},
},
},
};
问题:上传到 S3 的文件没有正确显示或访问。 原因:
解决方法:
通过上述步骤,可以在 Keystone JS 中有效地管理和存储 S3 对象数组,同时解决可能遇到的常见问题。
领取专属 10元无门槛券
手把手带您无忧上云