我是 .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/