要将AWS S3中现有的图像链接到Strapi集合,可以使用Strapi的自定义插件来实现。以下是一种解决方法的代码示例:
创建一个新的Strapi插件,命名为aws-s3-plugin
。
在插件目录下创建一个新的文件夹,命名为extensions
。
在extensions
文件夹下创建一个新的文件夹,命名为aws-s3
。
在aws-s3
文件夹下创建一个新的文件,命名为services.js
。
在services.js
文件中编写以下代码:
const AWS = require('aws-sdk');
module.exports = {
upload: async (file) => {
const s3 = new AWS.S3({
accessKeyId: 'your_access_key_id',
secretAccessKey: 'your_secret_access_key',
});
const params = {
Bucket: 'your_bucket_name',
Key: `${Date.now().toString()}-${file.name}`,
Body: file.buffer,
};
const uploadedFile = await s3.upload(params).promise();
return uploadedFile.Location;
},
};
请确保将your_access_key_id
,your_secret_access_key
和your_bucket_name
替换为您自己的AWS S3凭证和桶名称。
在插件目录下创建一个新的文件夹,命名为config
。
在config
文件夹下创建一个新的文件,命名为routes.json
。
在routes.json
文件中编写以下代码:
{
"routes": [
{
"method": "POST",
"path": "/aws-s3/upload",
"handler": "aws-s3.upload",
"config": {
"policies": []
}
}
]
}
在插件目录下创建一个新的文件夹,命名为controllers
。
在controllers
文件夹下创建一个新的文件,命名为AwsS3.js
。
在AwsS3.js
文件中编写以下代码:
module.exports = {
upload: async (ctx) => {
const { files } = ctx.request.body;
if (!files) {
return ctx.badRequest('No files provided');
}
const uploadedFiles = [];
for (const file of files) {
const uploadedFile = await strapi.plugins['aws-s3-plugin'].services.awsS3.upload(file);
uploadedFiles.push(uploadedFile);
}
ctx.send(uploadedFiles);
},
};
在插件目录下创建一个新的文件夹,命名为middlewares
。
在middlewares
文件夹下创建一个新的文件,命名为aws-s3.js
。
在aws-s3.js
文件中编写以下代码:
module.exports = async (ctx, next) => {
ctx.request.body = {
...ctx.request.body,
files: ctx.request.files,
};
await next();
};
在插件目录下创建一个新的文件夹,命名为public
。
在public
文件夹下创建一个新的文件夹,命名为aws-s3
。
在Strapi的根目录下打开终端,并执行以下命令安装依赖:
npm install aws-sdk
现在,您可以通过发送POST请求到/aws-s3/upload
来上传图像到AWS S3,并将返回的图像链接保存到Strapi集合中。