C# 如何将编码的Base64 zip文件解码为新的zip文件?
我试图用编码的base64字符串创建一个zip文件,但我一直无法从该字符串获取文件 我已经能够用它创建zip文件,但是我没有看到应该在其中的文件 到目前为止,我的代码是:C# 如何将编码的Base64 zip文件解码为新的zip文件?,c#,.net-core,base64,zip,C#,.net Core,Base64,Zip,我试图用编码的base64字符串创建一个zip文件,但我一直无法从该字符串获取文件 我已经能够用它创建zip文件,但是我没有看到应该在其中的文件 到目前为止,我的代码是: public static void Main(string[] args) { IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, true) .Build
public static void Main(string[] args)
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.Build();
var fileName = args[0];
var path = $"{config["zipPath"]}\\{fileName}";
byte[] zipBytes = Convert.FromBase64String(args[1]);
using(var memoryStream = new MemoryStream(zipBytes))
{
// without this I can't open my zip file
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
}
using (var fileStream = new FileStream(path, FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.CopyTo(fileStream);
}
}
}
澄清
我正在解码的字符串是一个经过编码的zip文件。我得到Base64字符串,我需要解码它并创建一个与原始文件相同的zip文件,包括压缩的文件
进一步澄清
我从第三方收到一个zip文件。但是,我不是以zip文件的形式接收它,而是以编码的Base64字符串的形式接收它。该zip的字节被编码为Base64字符串。
我需要做的是使用我收到的Base64字符串重新创建原始zip文件。读取文件中的所有文本: 例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
然后将文本文件中的base64字符串转换为字节
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
然后您可以将这些字节写入zip文件
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
如果要在内存中提取,只需将其加载到memorystream中
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
读取文件中的所有文本: 例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
然后将文本文件中的base64字符串转换为字节
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
然后您可以将这些字节写入zip文件
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
如果要在内存中提取,只需将其加载到memorystream中
例如:
string text = System.IO.File.ReadAllText(@"C:\demofile.txt");
byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(@"C:\demofile_zip.zip", bytes);
using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
你得到的是什么类型的文件根本不重要,因为你会收到一个二进制表示和文件名。它可以是
.JPG
、.VHD
虚拟磁盘、.MDB
数据库等等
因此,您可以省略memoryStream和Ziparchive,只需将二进制数据写入扩展名为.zip的文件:
public static void Main(string[] args)
{
var path = @"c:\temp\fileName2.zip";
byte[] zipBytes = Convert.FromBase64String("UEsDBBQAAAAIAC5YR063vtp6EwEAALcBAAAJAAAAcHJpbWUudHh0ZZDfSsMwFMbvA3mHPoBCkv5Ze5EL1zkVnBPX2QsRmdtxLWuTkmSyvb0nUaogBHLO73x8+U6eRbIcXKuVLbX6BONgJzkl9c36bvaGvcWRFJSsnAFrK7AOjBesLTyatgcFTjJKFq2qtHFHA/N5JbnIEW1OfxETCSU/YAG9zMeuQhsZB48pqG3j5YIl3xYjyXmBMUJ7bYw2ZQPbg386oKuuK3U/dHDyYZeqOwecZpN81JQaV/DZQ3d7HnDbxsBm9wtrbQ64s+QX6IKeAY4GIShPKbmHDyfjPMv8DoMUeD+1+8bJNGZYT7VzupcFQ2nNJYtYxBMhorgosLzk48GxwLHnQTD5L6DkJfzzA7hXSmbwftz7PF9QSwECFAAUAAAACAAuWEdOt77aehMBAAC3AQAACQAAAAAAAAABACAAAAAAAAAAcHJpbWUudHh0UEsFBgAAAAABAAEANwAAADoBAAAAAA==");
using (FileStream fs = new FileStream(path, FileMode.Create))
{
fs.Write(zipBytes,0,zipBytes.Length);
}
}
(我以前从.zip创建了base64字符串)
你得到的是什么类型的文件根本不重要,因为你会收到一个二进制表示和文件名。它可以是
.JPG
、.VHD
虚拟磁盘、.MDB
数据库等等
因此,您可以省略memoryStream和Ziparchive,只需将二进制数据写入扩展名为.zip的文件:
public static void Main(string[] args)
{
var path = @"c:\temp\fileName2.zip";
byte[] zipBytes = Convert.FromBase64String("UEsDBBQAAAAIAC5YR063vtp6EwEAALcBAAAJAAAAcHJpbWUudHh0ZZDfSsMwFMbvA3mHPoBCkv5Ze5EL1zkVnBPX2QsRmdtxLWuTkmSyvb0nUaogBHLO73x8+U6eRbIcXKuVLbX6BONgJzkl9c36bvaGvcWRFJSsnAFrK7AOjBesLTyatgcFTjJKFq2qtHFHA/N5JbnIEW1OfxETCSU/YAG9zMeuQhsZB48pqG3j5YIl3xYjyXmBMUJ7bYw2ZQPbg386oKuuK3U/dHDyYZeqOwecZpN81JQaV/DZQ3d7HnDbxsBm9wtrbQ64s+QX6IKeAY4GIShPKbmHDyfjPMv8DoMUeD+1+8bJNGZYT7VzupcFQ2nNJYtYxBMhorgosLzk48GxwLHnQTD5L6DkJfzzA7hXSmbwftz7PF9QSwECFAAUAAAACAAuWEdOt77aehMBAAC3AQAACQAAAAAAAAABACAAAAAAAAAAcHJpbWUudHh0UEsFBgAAAAABAAEANwAAADoBAAAAAA==");
using (FileStream fs = new FileStream(path, FileMode.Create))
{
fs.Write(zipBytes,0,zipBytes.Length);
}
}
(我以前从.zip创建了base64字符串)
我的建议是使用ZipFile方法
我的建议是使用ZipFile方法
args[1]
中有什么内容?Base64字符串?而args[0]
?@FalcoAlexander args[0]=压缩文件的名称,args[1]=编码压缩文件的Base64字符串我不能完全理解…您需要创建一个包含Base64字符串的临时文件,并且该文件应该在一个新的.zip文件中?那么你显然遗漏了什么。@FalcoAlexander我只需要zip文件,我希望它与编码为Base64的原始zip文件相同,因此将文件包括在原始zip文件中可能与args[1]
中的文件重复?Base64字符串?而args[0]
?@FalcoAlexander args[0]=压缩文件的名称,args[1]=编码压缩文件的Base64字符串我不能完全理解…您需要创建一个包含Base64字符串的临时文件,并且该文件应该在一个新的.zip文件中?那么你显然遗漏了什么。@FalcoAlexander我只需要zip文件,我希望它与编码为Base64的原始zip文件相同,因此将文件包括在原始zip文件中Base64的可能副本已经是一个zip文件。我需要创建一个拉链出来。我没有单独获取它包含的文件base64已经是一个zip。我需要创建一个拉链出来。我没有单独获取它包含的文件这似乎创建了一个新条目,我想要的是原始zip文件的原始条目显然您的问题非常不清楚,另请参见其他答案?不知道你想达到什么目的…是的,很奇怪,但我想我做到了。你确定你得到的Bas64字符串是正确的吗?您的代码在这方面看起来不错,即使我不了解其中的ZipArchive
的用法。这似乎创建了一个新条目,我想要的是原始zip文件的原始条目显然您的问题很不清楚,另请参见其他答案?不知道你想达到什么目的…是的,很奇怪,但我想我做到了。你确定你得到的Bas64字符串是正确的吗?您的代码在这方面看起来很好,即使我不理解其中的ZipArchive
。