【问题标题】:File Storage (S3) with AdonisJS 5使用 AdonisJS 5 的文件存储 (S3)
【发布时间】:2020-11-30 09:10:27
【问题描述】:

在 AdonisJS v4 文档中,我们有 this 部分解释了如何将文件流式传输到 S3 存储桶。我在 AdonisJS v5 文档中寻找类似的东西,但它只有一个 example 说明如何将文件上传到本地服务器。

如果它还没有准备好,因为 Adonis 5 不是它的最后一个版本,这是通过 Adonis v5(特别是使用 typescript)将文件上传到 S3 的另一种方式?

【问题讨论】:

    标签: javascript typescript amazon-s3 adonis.js


    【解决方案1】:

    Adonis 4 使用 flydrive 实现 s3 存储,您也可以使用它来简化和节省时间。使用 flydrive 配置和实例化后非常简单

    // Supported drivers: "local", "s3", "gcs"
    await storage.disk('s3').put('testfile.txt', 'filecontents');
    

    【讨论】:

      【解决方案2】:

      我找到了一种使用 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);
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-20
        • 2019-09-19
        相关资源
        最近更新 更多