如何在没有 AWS cli 的情况下使用 s3 私有存储桶下载文件

How to download a file using from s3 private bucket without AWS cli

是否可以在没有 AWS cli 的情况下从 AWS s3 下载文件?在我的生产服务器中,我需要下载 S3 存储桶中的配置文件。

我正在考虑使用 Amazon Systems Manger 运行 一个脚本来从 S3 下载配置(YAML 文件)。但是我们不想在生产机器上安装 AWS cli。我该怎么做?

您需要某种程序来调用 Amazon S3 API 来检索对象。例如,使用 AWS SDK 的 PowerShell 脚本(使用 AWS Tools for Windows PowerShell)或 Python 脚本。

您也可以生成一个 Amazon S3 pre-signed URL,这将允许通过普通的 HTTPS 调用(例如 curl)从 Amazon S3 下载私有对象。这可以使用 Python 的 AWS SDK 轻松完成,或者您可以自己编写代码而不使用库(有点复杂)。

在上述所有示例中,您需要向 script/program 提供一组 IAM 凭据,以便通过 AWS 进行身份验证。

只需为任何 C# 代码爱好者添加注释以解决 .Net 问题

  1. 首先编写(C#)代码将私有文件下载为字符串

     public string DownloadPrivateFileS3(string fileKey)
     {
         string accessKey = "YOURVALUE";
         string accessSecret = "YOURVALUE";;
         string bucket = "YOURVALUE";;
         using (s3Client = new AmazonS3Client(accessKey, accessSecret, "YOURVALUE"))
         {
                 var folderPath = "AppData/Websites/Cases";
                 var fileTransferUtility = new TransferUtility(s3Client);
                 Stream stream = fileTransferUtility.OpenStream(bucket, folderPath + "/" + fileKey);
                 using (var memoryStream = new MemoryStream())
                 {
                      stream.CopyTo(memoryStream);
                     var response = memoryStream.ToArray();
                     return Convert.ToBase64String(response);
                 }
    
                 return "";
        }
    }
    
  2. 第二次写入JQuery代码将字符串下载为Base64

function downloadPrivateFile() {
$.ajax({url: 'DownloadPrivateFileS3?fileName=' + fileName, success: function(result){
        var link = this.document.createElement('a');
        link.download = fileName;
        link.href = "data:application/octet-stream;base64," + result;
        this.document.body.appendChild(link);
        link.click();
        this.document.body.removeChild(link);
  }});
}

从 HTML/C#/JQuery -

的任意位置调用 downloadPrivateFile 方法

享受快乐的编码和复杂问题的解决方案