从 byte[] 和 return 创建 zip 到浏览器
create zip from byte[] and return to browser
我想创建一个 zip 文件并将其 return 到浏览器,以便浏览器将 zip 下载到下载文件夹。
var images = imageRepository.GetAll(allCountryId);
using (FileStream f2 = new FileStream("SudaAmerica", FileMode.Create))
using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false))
{
foreach (var image in images)
{
gz.Write(image.ImageData, 0, image.ImageData.Length);
}
return base.File(gz, "application/zip", "SudaAmerica");
}
我已经尝试了上面的方法,但是我收到一条错误消息,说流已被处理。
这是可能的还是我应该使用另一个库然后 gzipstream?
这里的问题正是它所说的:你正在根据 gz
向它传递一些东西,但是 gz
在你离开 using
的那一刻就被处理掉了。
一个选择是等到在 using
块之外,然后告诉它使用文件名你刚刚写的东西 ("SudaAmerica"
)。但是,IMO 你根本不应该在这里写文件 。如果您改用 MemoryStream
,则可以使用 .ToArray()
获取内容的 byte[]
,您可以在 File
方法中使用它。这不需要 IO 访问,这是大约 20 种不同方式的胜利。好吧,也许有3种方法。但是...
var images = imageRepository.GetAll(allCountryId);
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gz = new GZipStream(ms, CompressionMode.Compress, false))
{
foreach (var image in images)
{
gz.Write(image.ImageData, 0, image.ImageData.Length);
}
}
return base.File(ms.ToArray(), "application/zip", "SudaAmerica");
}
请注意,gzip 流 不同于 与 .zip
存档,所以我非常怀疑这是否会得到您想要的结果。在 .NET Framework 的其他地方可以创建 Zip 存档,但它是 not via GZipStream
.
你可能想要ZipArchive
我想创建一个 zip 文件并将其 return 到浏览器,以便浏览器将 zip 下载到下载文件夹。
var images = imageRepository.GetAll(allCountryId);
using (FileStream f2 = new FileStream("SudaAmerica", FileMode.Create))
using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false))
{
foreach (var image in images)
{
gz.Write(image.ImageData, 0, image.ImageData.Length);
}
return base.File(gz, "application/zip", "SudaAmerica");
}
我已经尝试了上面的方法,但是我收到一条错误消息,说流已被处理。
这是可能的还是我应该使用另一个库然后 gzipstream?
这里的问题正是它所说的:你正在根据 gz
向它传递一些东西,但是 gz
在你离开 using
的那一刻就被处理掉了。
一个选择是等到在 using
块之外,然后告诉它使用文件名你刚刚写的东西 ("SudaAmerica"
)。但是,IMO 你根本不应该在这里写文件 。如果您改用 MemoryStream
,则可以使用 .ToArray()
获取内容的 byte[]
,您可以在 File
方法中使用它。这不需要 IO 访问,这是大约 20 种不同方式的胜利。好吧,也许有3种方法。但是...
var images = imageRepository.GetAll(allCountryId);
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gz = new GZipStream(ms, CompressionMode.Compress, false))
{
foreach (var image in images)
{
gz.Write(image.ImageData, 0, image.ImageData.Length);
}
}
return base.File(ms.ToArray(), "application/zip", "SudaAmerica");
}
请注意,gzip 流 不同于 与 .zip
存档,所以我非常怀疑这是否会得到您想要的结果。在 .NET Framework 的其他地方可以创建 Zip 存档,但它是 not via GZipStream
.
你可能想要ZipArchive