我正在从其中一个字段有文件的 couchbase 中获取一个对象。该文件被压缩,然后以 base64 编码。
我如何能够获取此字符串并将其解压缩回原始文件?
然后,如果我使用的是 ASP.MVC 4 - 我如何将它作为可下载文件发送回浏览器?
原始文件在 Linux 系统上创建并在 Windows 系统 (C#) 上解码。
我正在从其中一个字段有文件的 couchbase 中获取一个对象。该文件被压缩,然后以 base64 编码。
我如何能够获取此字符串并将其解压缩回原始文件?
然后,如果我使用的是 ASP.MVC 4 - 我如何将它作为可下载文件发送回浏览器?
原始文件在 Linux 系统上创建并在 Windows 系统 (C#) 上解码。
您应该使用Convert.FromBase64String
获取字节,然后解压缩,然后使用Controller.File
让客户端下载文件。要解压缩,您需要使用某种 ZIP 库打开 zip 文件。.NET 4.5 的内置ZipArchive
类应该可以工作。或者您可以使用另一个库,SharpZipLib和DotNetZip都支持从流中读取。
public ActionResult MyAction()
{
string base64String = // get from Linux system
byte[] zipBytes = Convert.FromBase64String(base64String);
using (var zipStream = new MemoryStream(zipBytes))
using (var zipArchive = new ZipArchive(zipStream))
{
var entry = zipArchive.Entries.Single();
string mimeType = MimeMapping.GetMimeMapping(entry.Name);
using (var decompressedStream = entry.Open())
return File(decompressedStream, mimeType);
}
}
您还需要文件的 MIME 类型,您可以使用它MimeMapping.GetMimeMapping
来帮助您获得大多数常见类型的 MIME 类型。
我过去曾成功地使用SharpZipLib来完成此类任务。
对于与您需要做的非常接近的示例,请查看此处。
基本上,步骤应该是这样的:
ZipFile
类的输入更新
如果字符串仅包含文件的压缩内容(不是完整的 Zip 存档),那么您可以简单地使用 .NET 中的GZipStream类来解压缩内容。你可以在这里找到一个样本。但初始步骤与上面相同(从数据库获取字符串,写入内存流,将内存流作为输入提供给 GZipStream 以进行解压缩)。