如何解决使用AdonisJS 5进行文件存储S3
在AdonisJS v4文档中,我们有this部分,说明如何将文件流式传输到S3存储桶。我曾在AdonisJS v5文档中寻找类似的内容,但其中只有example条关于如何将文件上传到本地服务器的信息。
如果由于Adonis 5的最新版本尚未准备就绪,这是否是通过Adonis v5(特别是带有打字稿)将文件上传到S3的另一种方式?
解决方法
我找到了一种使用aws-sdk进行此操作的方法,此代码并非100%是我的:
uploadToS3Bucket
功能:
import * as AWS from "aws-sdk";
import { v4 as uuid } from "uuid";
const s3 = new AWS.S3({
region: process.env.AWS_REGION,secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,accessKeyId: process.env.AWS_ACCESS_KEY_ID,});
export const uploadToS3Bucket = async (
file: any,bucket: string
): Promise<{ key: string; url: string }> => {
try {
const { type,subtype,extname } = file;
let mimeType = type + "/" + subtype;
let fileType = "image/jpg";
const name = uuid() + "." + extname;
let buffer = Buffer.from(JSON.stringify(file),"utf-8");
await s3
.putObject({
Key: name,Bucket: bucket,ContentType: fileType,Body: buffer.toString("base64"),ACL: "public-read",})
.promise();
let url = `https://${bucket}.s3.amazonaws.com/${name}`;
console.log(url);
return {
key: name,url,};
} catch (err) {
console.log(err);
return err;
}
};
在控制器中:
public async store({ request }: HttpContextContract) {
let file = getFileFromRequest(request,"defined_file_prop_name_here");
if (file) {
await uploadToS3Bucket(file,BUCKET_NAME);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。