从 Amazon S3 获取文件到客户端 Web 应用程序 - 它应该通过 Web API 发生吗?

Getting a file from Amazon S3 to client web app - should it happen via the Web API?

我正在创建一个 ASP .Net Core 2.1 Web API。前端(写在 Angular 中)将使用此 API,它用于许多事情,其中​​之一是保存和检索文件(图片、PDF 和 Word 文档等)

我们将所有这些文件存储在 Amazon S3 上。我正在观看一个教程视频 (https://www.youtube.com/watch?v=eRUjPrMMhCc),其中显示了如何创建存储桶,以及如何从 ASP .Net Core 2.0 Web [=22= 上传和下载来自 Amazon S3 的文件],我认为这太棒了,因为它正是我所需要的。

但后来我意识到,虽然上传功能可能有用,但下载功能可能没有用。原因是,如果用户通过客户端 Web 应用程序请求一个文件(存储在 Amazon S3 上),并且此请求转到 API(这是我的初衷),那么 API 将必须首先从 S3 下载此文件(这可能需要几秒钟),然后将其发送到客户端(再过几秒钟)。所以文件被传输了两次,因此不必要地减慢了从 S3 到客户端获取文件的过程。

我的想法对吗?如果 Angular 客户端直接从 S3 检索文件而不是通过 API 检索文件会更好吗?在速度方面?

Amazon SDK 有一种方法可以处理您所有的情况,这里的原则是使用 SDKAmazon S3 获得签名的 URL,然后将其传递给您的前端

  import * as AWS from "aws-sdk/global";

      AWS.config.update({
        region: env.bucketRegion,
    });

    let clientParams:any = {
        region: env.bucketRegion,
        apiVersion: '2006-03-01',
        params: {Bucket: env.rekognitionBucket}
    };
    if (environment.s3_endpoint) {
        clientParams.endpoint = env.s3_endpoint;
    }

    let s3 = new S3(clientParams);

   let url = s3.getSignedUrl('getObject', {
      Bucket: env.rekognitionBucket,
      Key: '1234.txt',
  });