我在S3存储桶上存储了一个压缩文件(.osz),其中包含一个.os文件,我需要读取该文件的内容。 由于安全原因,我需要能够解压缩/读取压缩文件的内容,而不必直接将文件下载到PC。
我能够使用S3存储桶路径的URL地址检索压缩文件(.osz)。然后,使用ZipArchive,我可以访问压缩文件中包含的文件。然后,可以通过使用“ ExtractToFile”功能来提取所需的文件,如下所示。但是,此函数提取文件(.os)并将其本地保存在指定的路径中。
WebClient client = new WebClient();
byte[] bytes = client.DownloadData(OSZFilepath); // Read the .osz file contents into a byte array
using (MemoryStream zipStream = new MemoryStream(bytes))
{
// Create the zip containing the file from the stream
ZipArchive zip = new ZipArchive(zipStream);
// extract the compressed file and download the .os file contained within
var fileName = Guid.NewGuid().ToString() + ".OS";
var baseDirectory = Environment.ExpandEnvironmentVariables(System.Web.Configuration.WebConfigurationManager.AppSettings["DataStorage"].ToString());
zip.Entries[0].ExtractToFile(Path.Combine(baseDirectory, "ProjectFiles", fileName));
尽管此提取的文件可以由我的程序成功读取和导入,但是由于安全限制和程序要求,由于无法将文件保存到用户的计算机上,因此我无法使用此方法。
因此,我需要以编程方式提取/解压缩所需的文件,以便读取内容并将其以编程方式导入到我的程序中。
我尝试使用以下代码执行此操作:
ZipArchiveEntry entry = zip.GetEntry(zip.Entries[0].Name);
Stream stream = entry.Open();
StreamReader reader = new StreamReader(stream);
string contents = reader.ReadToEnd();
但是,当我尝试导入生成的内容时,它会引发错误,表明该内容与使用'ExtractToFile'保存的文件的内容不同。
当我将此内容另存为单独的文件并将其与使用“ ExtractToFile”保存的文件进行比较时,这一点得到确认。 “ ExtractToFile”文件大于后者。
所以我的问题是:是否有另一种方法可以成功地解压缩/压缩压缩文件并获取内容,而无需使用“ ExtractToFile”方法,而不必将提取的文件保存在某个地方?
感谢您的帮助。