C# 多文件打包

public HttpResponseMessage GetZip()
{
var response = Request.CreateResponse(HttpStatusCode.OK);
try
{

ZipOutputStream zipOutputStream = null;
var pdfFiles =new List<fileC>;//pdfFiles  实际存在的文件路径列表
var tempDirPath = System.Web.Hosting.HostingEnvironment.MapPath("~/temp");

MemoryStream ms = new MemoryStream();
zipOutputStream = new ZipOutputStream(ms);

if (pdfFiles.Any())
{
foreach (var pdfFile in pdfFiles)
{
var fileInfo = new FileInfo(pdfFile.path);
ZipEntry entry = new ZipEntry(pdfFile.fileName);
entry.DateTime = DateTime.Now;
entry.Size = fileInfo.Length;
zipOutputStream.PutNextEntry(entry);
byte[] buffer = new byte[4096];
using (var streamReader = File.OpenRead(pdfFile.path))
{
StreamUtils.Copy(streamReader, zipOutputStream, buffer);
}
zipOutputStream.CloseEntry();
}
}

zipOutputStream.IsStreamOwner = false;
zipOutputStream.Close();
ms.Position = 0;
//var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(new MemoryStream(ms.ToArray()));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); //octec-stream
response.Content.Headers.ContentLength = ms.Length;
ContentDispositionHeaderValue contentDisposition = null;

contentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "candidates.zip"
};
response.Content.Headers.ContentDisposition = contentDisposition;

var tempDir = new DirectoryInfo(tempDirPath);
tempDir.Delete(true);
}
catch (Exception ex)
{
//response.Content = new StringContent(ex.Message);
logger.ErrorFormat("错误消息:{0} ,堆栈跟踪:{1}", ex.Message, ex.StackTrace);
}
return response;
}

原文地址:https://www.cnblogs.com/jayblog/p/13329917.html