使用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);
  }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...