在 C# 中从 S3 读取 .xz 文件

Posted

技术标签:

【中文标题】在 C# 中从 S3 读取 .xz 文件【英文标题】:Read .xz file from S3 in C# 【发布时间】:2020-07-22 14:34:38 【问题描述】:

我正在尝试使用以下代码从 S3 读取文件:

 var dir = new S3DirectoryInfo(_amazonS3Client, bucketName, folderName);
                IS3FileSystemInfo[] files = dir.GetFileSystemInfos();
                if(files.Length > 0)
                
                    _bucketKey = files[0].Name;
                    var request = new GetObjectRequest
                    
                        BucketName = bucketName,
                        Key = $"folderName/_bucketKey"
                    ;
                    using (GetObjectResponse response = await _amazonS3Client.GetObjectAsync(request))
                    using (Stream responseStream = response.ResponseStream)
                    using (var reader = new StreamReader(responseStream))
                    
                        var responseBody = reader.ReadToEnd();
                        File.WriteAllText(newFilePath, responseBody);
                    
                

它对于非压缩文件工作正常,但是,我需要一些关于如何读取 .xz 文件的建议?我的文件就像DummyData_2020-07-21.csv.xz

【问题讨论】:

【参考方案1】:

我找到了一个使用 SharpCompress 的解决方案,下面的代码对我有用

                    var request = new GetObjectRequest
                    
                        BucketName = bucketName,
                        Key = $"folderName/bucketKey"
                    ;

                    using (var obj = _amazonS3Client.GetObject(request))
                    
                        obj.WriteResponseStreamToFile($"fileLocationbucketKey");
                    

                    using (Stream xz = new XZStream(File.OpenRead($"fileLocationbucketKey")))
                    using (TextReader reader = new StreamReader(xz))
                    
                        var responseBody = reader.ReadToEnd();
                        File.WriteAllText(newFilePath, responseBody);
                     

【讨论】:

以上是关于在 C# 中从 S3 读取 .xz 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个项目中从 C# 中的多个配置文件中读取值?

如何在 C# 中从外部站点的 url 读取 PDF 文件 [关闭]

如何在 C# 中从包含 XML 的字符串中读取数据?

使用 C# 从 AWS 上的 S3 读取 Avro 数据

在scala中从S3解压缩文件时出现FileNotFoundException

在 C# Web 应用程序中从网络共享访问文件