저는 항상 SharpZipLib을 사용하여 ASP.NET 응용 프로그램에서 zip 파일을 만들고 매우 좋은 라이브러리를 찾습니다. 그러나 웹 응용 프로그램에서 저는 항상 zip 파일의 스트림으로 사용자에게 zip 파일을 직접 전달하는 http 응답 (Response.OutputStream
)의 OutPutStream을 사용했습니다.SharpZipLib로 여러 파일을 압축하고 문자열 내에 배치하십시오.
이제는 "파일"을 만들 필요가 있지만 Response.OutputStream
으로 보내는 대신 메서드에서 문자열 반환 값으로 보내야합니다. 그러나 내가 저장하려고 시도하는 zip 파일은 항상 손상됩니다.
MemoryStream outputMemoryStream = new MemoryStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputMemoryStream);
zipOutputStream.SetLevel(3);
Encoding isoEncoding = Encoding.GetEncoding(28591);
int nfiles = 10;
for (var fileId=0; i<nfiles;i++)
{
using (var inputMemoryStream = new MemoryStream())
{
inputMemoryStream.Position = 0;
string fileContent = GetFileContent(fileId);
inputMemoryStream.Write(isoEncoding.GetBytes(fileContent), 0, filecontent.Length);
var newEntry = new ZipEntry("file_" + fileId + ".xml");
newEntry.DateTime = DateTime.Now;
zipOutputStream.PutNextEntry(newEntry);
inputMemoryStream.Position = 0;
StreamUtils.Copy(inputMemoryStream, zipOutputStream, new byte[4096]);
zipOutputStream.CloseEntry();
}
}
zipOutputStream.IsStreamOwner = false;
zipOutputStream.Finish();
zipOutputStream.Close();
zipOutputStream.Dispose();
outputMemoryStream.Position = 0;
var sr = new StreamReader(ms);
string zipFileString = sr.ReadToEnd();
return zipFileString;
고마워요! 인코딩되지 않은 문자열을 클라이언트에 반환하면 바이트가 엉망이되었습니다. 인코딩을 사용하면 바이트 시퀀스가 손상되지 않습니다. – CiccioMiami