c# - 如何将编码的 Base64 zip 文件解码为新的 zip 文件?
问题描述
我正在尝试使用编码的 base64 字符串创建一个 zip 文件,但我一直无法从字符串中获取文件。
我已经能够从中创建 zip 文件,但我没有看到应该在其中的文件。
到目前为止我的代码:
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 文件。
解决方案
你得到什么样的文件根本不重要,因为你会收到一个二进制表示和它的文件名。它可以是一个.JPG
,一个.VHD
虚拟磁盘,一个.MDB
数据库,等等。
所以你可以省略 memoryStream 和 theZipArchive,你只需将二进制数据写入一个扩展名为 .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 字符串)
var path = @"c:\temp\import.zip";
string base64 = "";
using (FileStream zip = new FileStream(path, FileMode.Open))
{
var zipBytes = new byte[zip.Length];
zip.Read(zipBytes,0,(int)zip.Length);
base64 = Convert.ToBase64String(zipBytes);
}
推荐阅读
- javascript - 在折扣计算中显示总节省
- xcode - SwiftUI:无法使用 UIActivityViewController 共享图像
- vue.js - CopyWebpackPlugin 没有将静态文件复制到输出目录
- c++ - 从文本文件中逐字读取每一行并转换为int(无限循环或崩溃?)
- json - 使用 jq 将 JSON 的一个属性从多个连接到一个文件中
- ruby-on-rails - 我可以在交换机内部使用路由吗?
- karate - 空手道框架基本访问认证
- flutter - 颤振列未消耗并导致溢出
- r - R:用于 xml 的 httr SOAP POST 请求返回错误 - “不支持媒体类型”
- javascript - 如何将带有嵌套表格的 HTML 表格正确导出到 Excel?