代码之家  ›  专栏  ›  技术社区  ›  Fabricio Rodriguez

从Amazon S3向客户端web应用程序获取文件-是否应该通过web API实现?

  •  0
  • Fabricio Rodriguez  · 技术社区  · 7 年前

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

    我们将所有这些文件存储在Amazon S3上。我在看辅导视频( https://www.youtube.com/watch?v=eRUjPrMMhCc )他展示了如何创建一个bucket,以及如何从一个ASP.Net Core 2.0web API上传和下载Amazon S3中的文件,我认为这非常棒,因为这正是我所需要的。

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Abderrahim Soubai-Elidrisi    7 年前

    亚马逊 SDK 有一个方法来处理所有的场景普林西比在这里要从 Amazon S3 使用 软件开发工具包 然后把它传给你的前端

      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',
      });