2017-03-16 3 views
0

웹 응용 프로그램이 aspx로 실행되고 있습니다. 이는 기존의 응용 프로그램입니다. 제출하는 동안 사용자는 지원 문서 (일반적으로 pdf로 변환 된 그림)를 SQL 서버로 업로드하여 바이너리로 저장하고 승인 중에 여러 번 다운로드 할 수 있습니다.웹 사이트에서 다운로드 할 때 Adobe 파일에서 PDF 파일을 열 수는 없지만 가장자리에서 열 수 있습니다.

그러나 우리는 이제 사용자가 Adobe의 Adobe Reader에서 pdf 파일을 열 수없고 "파일이 손상되어 복구 할 수 없습니다"라는 문제가 발생하기 시작했습니다. 에러 메시지. MS Edge에서 열 수 있기 때문에 실제로 손상되지 않습니다. pdf 파일을 업로드하기 전에 제대로 열 수 있음을 확인했습니다.

HttpPostedFile file = this.attachmentUploader.PostedFile; 
if (file == null) 
{ 
    file = Session["postedFile"] as HttpPostedFile; 
} 

if (file != null) 
{ 
    var fileName = this.attachmentUploader.FileName; 
    fileName = fileName.Length >= 100 ? string.Concat(fileName.Substring(0, 50).Trim(), ".pdf") : fileName; 
    Attachment attachment = new Attachment() 
    { 
     FileName = fileName, 
     File = this.attachmentUploader.FileBytes 
    }; 

    db.Attachments.Add(attachment); 
    db.SaveChanges(); 
} 

이 다운로드 코드

byte[] file = null; 
// Code here to pull file from db 
if (file != null) 
{ 
    Response.Buffer = true; 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("Content-Disposition",  "attachment;filename=support_doc.pdf"); 
    Response.OutputStream.Write(file, 0, file.Length); 
} 

감사 어떤 도움을입니다!

+0

* "여전히 MS Edge에서 열 수 있으므로 실제로 손상되지 않습니다."* - 잘못되었습니다. 우연히 한 사람의 뷰어가 실제로 가비지가 될 수있는 것을 정확하게 표시한다고해서 데이터가 가비지가 아님을 의미하지는 않습니다. 피해를 비교하고 분석 할 수 있도록 PDF를 좋은 버전과 나쁜 버전으로 공유 한 경우 도움이 될 수 있습니다. – mkl

답변

0

실제로 다운로드 된 파일은 실제 PDF와 HTML 파일의 두 개의 연결된 파일로 구성됩니다.

HTML 파일의 크기는 70 킬로바이트이며, 외부 자바 스크립트와 이미지가없는 경우는 다음과 같습니다

[--- 개인 정보 보호를 위해 제거 이미지 ---]

I "다운로드 코드"다음에 다른 코드가이 HTML을 출력에 추가한다고 가정하십시오.

해당 코드를 검색하거나 Response.OutputStream을 간단히 닫고 Response.OutputStream.Write(file, 0, file.Length) 다음에 응답을 완료하고자 할 수 있습니다.


를 PDF 프로세서 간 참조 정보가있는 말단에서 PDF를 읽기 시작해야하는 PDF 사양에 따라

있지만 수중에있는 파일의 경우까지 PDF 등 쓰레기 거의 70킬로바이트 존재 구문이 관련되어 있습니다.

따라서 모든 PDF 뷰어가 파일을 잘못된 것으로 거부해도 괜찮습니다.

+0

@KeithR. 답변에서 사진을 제거하더라도 개정 내역에 남아 있습니다. 중재자 관심을 표명하여 이미지에서 이미지를 삭제하고 메시지에 이유를 설명하고 싶다고 설명합니다. 진행자는 직원에게 연락하여 업데이트 기록에서 이미지를 삭제할 수 있습니다. 그게 당신의 의도라면 질문과 동일하게하십시오. –

관련 문제