이전에 업로드 한 데이터베이스에서 저장 한 이진 PDF 파일을 클라이언트에 반환하는 ASP.net 응용 프로그램이 있습니다.IE6에서 PDF 첨부 파일을 표시하는 방법
인터넷 익스플로러 6 (내 삶의 이야기!)을 제외한 모든 브라우저에서 정상적으로 작동하는 코드입니다. IE6에서 사용자가 열 때 Adobe는 "이 문서를 여는 동안 오류가 발생했습니다. 파일을 찾을 수 없습니다."라는 오류를보고합니다.
사용자가 저장을 클릭하면 PDF가 저장되어 두 번 클릭하여 열 수 있습니다. 나는 곤두박질 친다. Google은 캐싱 (개인용으로 cachecontrol 설정) 제안을했지만 나는 그 중 아무것도 시도했지만 아무것도 효과가 없었습니다.
처음 ASP에서 .net 서버 레이어 (NFop 사용)에서 PDF를 생성 할 때 IE가 똑같이 열립니다! (동일한 코드 사용)!
- ASP .NET 3.5
- IE6.0.2900.2180.xpsp_s : 여기
// Firefox doesn't like spaces in filenames.
filename = filename.Replace(" ", "_");
string extension = Path.GetExtension(filename);
string contentType;
switch (extension)
{
case "pdf":
contentType = "application/pdf";
break;
default:
contentType = "application/x-unknown";
break;
}
context.Response.Clear();
context.Response.AddHeader("content-disposition", "attachment;filename=" + filename);
context.Response.Charset = "";
context.Response.ContentType = contentType;
context.Response.BinaryWrite(data);
context.Response.Flush();
응용 프로그램 버전입니다 : 여기
와이어를 통해 이진 데이터를 전송하는 내 코드입니다
어떤 도움 2008/제안은 많이 주시면 감사하겠습니다. 감사합니다 :)
편집 :
내가 헤더를 볼 수 피들러에 연결하고 있는지 충분히 그것을 캐싱 문제가 될 것으로 보인다 않습니다. grrr!
내 NFop PDF (작동하는 페이지)를 업로드하면 cache-control = private가 전송됩니다. 첨부 파일 PDF (작동하지 않는 PDF)를 업로드하면 no-cache가 전송됩니다.
Response 객체를 조사한 결과 context.Response.Flush()를 호출 할 때 두 객체가 모두 동일한 헤더를 가지고있는 것처럼 보입니다.
여전히 엉망진창입니다!
이 해결 : 우리의 프레임 워크
어딘가에 반사하여 호출되고 있었다 불량 방법이었다
/// 요청의 expiratoin을 설정하고 어떤 캐시를 강제하지 ///를 /// protected void SetCacheExpiration (HttpContext context) { // 즉시 만료되도록 캐시를 설정합니다. context.Response.Cache.SetCacheability (HttpCacheability.NoCache); context.Response.Cache.SetSlidingExpiration (true); context.Response.Cache.SetExpires (DateTime.Now); context.Response.Cache.SetMaxAge (새 TimeSpan (0, 0, 0)); context.Response.Cache.SetNoStore(); context.Response.Cache.SetAllowResponseInBrowserHistory (false); context.Response.Cache.SetValidUntilExpires (false); context.Response.Cache.SetRevalidation (HttpCacheRevalidation.AllCaches);
}
감사합니다. 캐싱을 부탁드립니다. 실제로 다운로드를 캐시하지 않은 유일한 브라우저 (열 때)는 IE6이었습니다.
'Path.GetExtension (fileName)'을 호출해야합니다. – SLaks
팁 주셔서 감사합니다! :) – Russell
'Path.GetExtension (fileName)'에는'.'가 포함됩니다. – SLaks