将多个流或byte数组压缩成zip流⽂件
需要将多个流⽂件例如将pdf转为相应的图⽚之后,把这些图⽚打包成压缩⽂件流下载,Nuget上搜索使⽤SharpZipLib包来进⾏⽂件的压缩.
/// <summary>
/// 将多个流进⾏zip压缩,返回压缩后的流
/// </summary>
/// <param name="streams">key:⽂件名;value:⽂件名对应的要压缩的流</param>
/// <returns>压缩后的流</returns>
public static Stream PackageManyZip(Dictionary<string,byte[]> streams)
{
byte[] buffer =new byte[6500];
MemoryStream returnStream =new MemoryStream();
var zipMs =new MemoryStream();
using(ZipOutputStream zipStream =new ZipOutputStream(zipMs))
{
zipStream.SetLevel(9);
foreach(var kv in streams)
{
string fileName = kv.Key;
var byteInput = kv.Value;
using(var streamInput =new MemoryStream(byteInput))
{
zipStream.PutNextEntry(new ZipEntry(fileName));
while(true)
{
var readCount = streamInput.Read(buffer,0, buffer.Length);
if(readCount >0)
{
zipStream.Write(buffer,0, readCount);
}
else
{
break;
}
}
zipStream.Flush();
}
}
zipStream.Finish();
zipMs.Position =0;
zipMs.CopyTo(returnStream);
}
returnStream.Position =0;
return returnStream;
}
/
// <summary>
/// 将多个流进⾏zip压缩,返回压缩后的流
/// </summary>
/// <param name="streams">key:⽂件名;value:⽂件名对应的要压缩的流</param>
/// <returns>压缩后的流</returns>
public static Stream PackageManyZip(Dictionary<string, Stream> streams)
{
dj网站byte[] buffer =new byte[6500];
MemoryStream returnStream =new MemoryStream();
var zipMs =new MemoryStream();
using(ZipOutputStream zipStream =new ZipOutputStream(zipMs))
王麟伤不起
{
zipStream.SetLevel(9);
foreach(var kv in streams)
{
讲不出再见歌词string fileName = kv.Key;
using(var streamInput = kv.Value)
致爱{
streamInput.Seek(0, SeekOrigin.Begin);
zipStream.PutNextEntry(new ZipEntry(fileName));
while(true)
{
希望について
var readCount = streamInput.Read(buffer,0, buffer.Length);
if(readCount >0)
{
zipStream.Write(buffer,0, readCount);
}
else
{
break;
}
}
zipStream.Flush();
}
}
zipStream.Finish();
zipMs.Position =0;
zipMs.CopyTo(returnStream);
}
returnStream.Position =0;
return returnStream;
}
点滴梦想