2014-10-22 5 views
0

저는 항상 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; 

답변

1

하는 Base64로를 사용해보십시오 : 최종 단계는 흐름 따라서 오류가 방법이어야한다 아래 문자열을 변환 zip 파일이 형식에서 얻은 다른 압축 파일을 제대로 수행으로 저장하기 바이트 []를 인코딩 된 문자열로 변환하거나 변환합니다.

Convert.ToBase64String(byte[])Convert.FromBase64String(byte[])이 트릭을 수행해야합니다.

+0

고마워요! 인코딩되지 않은 문자열을 클라이언트에 반환하면 바이트가 엉망이되었습니다. 인코딩을 사용하면 바이트 시퀀스가 ​​손상되지 않습니다. – CiccioMiami

관련 문제