【问题标题】:How to stream a file directly to S3 in C# without saving locally first如何在 C# 中将文件直接流式传输到 S3 而无需先在本地保存
【发布时间】:2018-05-01 04:03:06
【问题描述】:

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

这是用例:

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

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

以下代码是来自我的 .NETCORE 控制台应用程序的 sn-p,它将 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 用于公开我可以用于 outFile 文件流的 Amazon.S3.IO 类,但 AWS 决定不将其发布到 .NETCORE 2.+。 AWS 说使用 AmazonS3Client 或 TransferUtility。但是,我找不到有关如何在没有本地文件的情况下上传流的示例。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: c# .net-core aws-sdk


    【解决方案1】:

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

    【讨论】:

    • 来源会很棒!
    • 您有可以分享的代码示例吗?
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2018-04-11
    • 2023-02-23
    • 2015-07-13
    相关资源
    最近更新 更多