c# - 如何在 C# 中直接将文件流式传输到 S3 而无需先在本地保存

标签 c# .net-core aws-sdk

我是 .Net 编程的新手,一直在努力解决如何将文件从 C#(DOTNETCORE 2.+)流式传输到 S3 而无需将其保存在本地。

这是用例:

能够向 SQL 服务器提交查询并将 GZipped 分隔文件提取到 S3 存储桶。这将需要在 .NETCORE 中编码,因为最终目标是在 Linux Docker 容器中运行它。

约束 - 磁盘空间和内存有限,因此无法在本地保存大文件然后将其移动到 S3。

以下代码是我的 .NETCORE 控制台应用程序的一个片段,它将 sqldatareader 的数据写入到本地文件的压缩流中:

        using (SqlConnection conn = new SqlConnection(cs))
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        using (FileStream outFile = File.Create(filepath + filename + fileextension))
        using (GZipStream compress = new GZipStream(outFile, CompressionMode.Compress))
        using (StreamWriter sw = new StreamWriter(compress))
        {
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            StringBuilder sb = new StringBuilder();
            Object[] row = new Object[dr.FieldCount];

            while (dr.Read())
            {
                dr.GetValues(row);
                sw.WriteLine(String.Join(delimiter, row));
            }
        }

.NETCORE AWSSDK 用于公开 Amazon.S3.IO 类,我可以将其用于 outFile 文件流,但 AWS 决定不将其发布到 .NETCORE 2.+。 AWS 说使用 AmazonS3Client 或 TransferUtility。但是,我找不到有关如何在没有本地文件的情况下上传流的示例。

任何帮助,将不胜感激。

谢谢你。

最佳答案

我最终创建了一个类,该类在使用 S3 分段上传 API 时返回默认为 10 MB 的流。在该类中,使用了内存流,因此可以控制磁盘和内存。

关于c# - 如何在 C# 中直接将文件流式传输到 S3 而无需先在本地保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989707/

相关文章:

c# - 解决调用链反模式

c# - 当用户权限基于特定帐户/角色以外的其他内容时,自定义用户授权的最佳方法是什么?

.net - Ubuntu - 安装 .net 核心

amazon-web-services - 如何避免在 AWS 云跟踪 API 调用中获得较旧的结果

ios - DynamoDB 如何对 bool 值使用过滤器表达式

c++ - AWS S3 C++ : List all the object when result is truncated

c# - 如何在属性中存储 Linq where 条件

c# - 如何将 foreach 与二维对象数组一起使用?

linux - 高并发异步asp.net核心应用程序中TaskScheduler的OutOfMemoryException

linux - 运行命令并显示控制台输出的 Bash 脚本,直到出现某些短语或超时