URL에서 일련의 문자열을 가져 와서 해당 문자열과 관련된 일부 pdfs를 찾아서 DotNetZip을 사용하여 압축 한 다음 사용자에게 반환하는 웹 페이지가 있습니다.손상된 zip 파일 생성을 디버깅하는 방법?
protected void Page_Load(object sender, EventArgs e)
{
string[] fileNames = Request.QueryString["requests"].Split(',');
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "application/zip";
string archiveName = String.Format("MsdsRequest-{0}.zip", DateTime.Now.ToString("yyyy-mm-dd-HHmmss"));
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + archiveName + "\"");
using (ZipFile zip = new ZipFile())
{
foreach (string fileName in fileNames)
{
zip.AddFile(String.Format(SiteSettings.PdfPath + "{0}.pdf", msdsFileName), "");
}
zip.Save(Response.OutputStream);
}
Response.Flush();
}
(당신이하기 전에 누군가가이 URL에 다른 값을 넣으면는 이러한 보안 파일이 아닌 ... 괜찮을 것입니다.)
: 여기를 Page_Load이다 -이 작업을 수행하는 페이지는 매우 간단합니다내 개발 상자에서 제대로 작동합니다. 그러나 QA 시스템에서 테스트 할 때 zip 파일을 다운로드하지만 손상되었습니다. 오류가 발생하지 않고 이벤트 로그에 아무 것도 기록되지 않습니다.
QA 환경에서 대화식으로 디버깅 할 수있는 방법을 찾는 것이 가능하지만 실제로 dll을 찾을 수없는 등의 오류가 발생하여 실제로 아무 것도 실패하지 않고 성공적으로 디버깅 할 수 있습니다. 비어 있지 않은 (그러나 손상된) zip 파일을 생성하면서, 나는 그것을 통해 단계별로 많은 것을 발견하지 않을 것이라고 생각하고있다.
웹 서버가 어떤 방식 으로든 파일을 "수정"하여 "돕는"것이 문제 일 수 있습니까?
로컬 상자에서 작동하고 qa 상자에서 작동하지 않는 HTTP 응답 헤더를 살펴 보았지만 약간 차이가 있지만 담배가 전혀 보이지 않았습니다.
내가 거부 한 다른 생각으로는 콘텐츠 길이 값이 너무 작 으면 콘텐츠를 손상시킬 수 있다고 생각하기 때문에 콘텐츠 길이가 가능성으로 생겼습니다 ...하지만 그 이유는 분명하지 않습니다. 나는 그것이 zip을 얻고 하나의 파일을 다운로드하려고 할 때 작은 zip을 얻으려고 시도하기 때문에 그것이 정확하게 생각하지 않는다 ... 여러 파일을 다운로드하는 것은 나에게 훨씬 더 큰 zip을 준다. 따라서 오류가 기록되지 않는다는 사실과 함께 zip 유틸리티가 파일을 정확하게 찾고 압축하는 문제를 해결할 수 있다고 생각합니다.
다음은 헤더입니다.
내 개발 시스템의 응답 헤더
HTTP/1.1 200 OK
Date: Wed, 02 Jan 2013 21:59:31 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="MsdsRequest-2013-59-02-165931.zip"
Transfer-Encoding: chunked
Cache-Control: private
Content-Type: application/zip
품질 보증 시스템 (작동하지 않는)
HTTP/1.1 200 OK
Date: Wed, 02 Jan 2013 21:54:37 GMT
Server: Microsoft-IIS/6.0
P3P: CP="NON DSP LAW CUR TAI HIS OUR LEG"
SVR: 06
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="MsdsRequest-2013-54-02-165437.zip"
Cache-Control: private
Content-Type: application/zip
Set-Cookie: (cookie junk removed);expires=Wed, 02-Jan-2013 21:56:37 GMT;path=/;httponly
Content-Length: 16969
하지 아무것도 때문에이 접근하기가 주장하는 방법을 확인에 응답 헤더 (작업) 실패. 웹 서버 구성 문제가 될 수 있다고 생각합니다 (더 좋은 아이디어가 없으므로). 그러나 어디에서 봐야할지 모르겠습니다. 내가 취할 수있는 전술이 있니?
두 가지, 첫째로는 두 번째로이 핸들러의 GZIP 별도의 압축을 해제, 우편을 보내 핸들러를 사용합니다. – Aristos