생성스트리밍 PDF 파일을 다운로드 할 파일을 제공하는 제네릭 처리기를 Adobe Reader가 손상 오류
는Dim request As HttpRequest = context.Request
Dim response As HttpResponse = context.Response
response.ContentType = "application/octet-stream"
response.AddHeader("content-disposition", "inline; filename=" & filename)
response.Buffer = True
response.OutputStream.Write(fileBytes, 0, fileBytes.Length)
response.Flush()
response.Close()
('fileBites은'내 바이트 배열, '파일 이름은'내 파일 이름입니다).
fileBites가 .txt 파일 인 경우 다운로드가 시작되고 파일을 완벽하게 읽습니다.
그러나 .pdf 및 .docx 파일이 손상되었음을 발견했습니다. - .docx의 경우 Word에서 파일을 복구해야하고 그렇게 할 수있는 권한이 있는지 묻습니다. 이 권한을 부여하면 즉시 수정되어 완벽하게 표시됩니다.
분명히 나는 사용자가이 손상 대화를보고 잠시 동안 조사한 후에 이것을 발견했다 : http://forums.asp.net/t/1301978.aspx/1/10 - 부패의 이유가 하나의 여분의 비어있는 비트라는 것이 바이트 끝에 기록되었다 배열 : 나는 하나의 비트에 의해 길이를 놓아 확인 :
response.OutputStream.Write (fileBytes, 0 fileBytes.Length을 - 1)
과 마법 같은 .DOCX 다운로드 지금 작동! (현재의 문제는 아니며 문맥에 포함 시키거나 다른 사람이 같은 문제가있는 경우)
.docx 파일은 이제 올바르게 스트리밍되지만 .pdf 파일은 그렇지 않습니다. 그들은 (정확한 KB 크기로) 한 조각에 전송하는 것 그러나 나는 시도하고 다운로드 한 파일을 열 때 어도비 리더 X는 저에게 말한다 : 2008 년 어도비 포럼에 상당히 오랫동안 해결되지 않은 논의가 있었다
Adobe Reader could not open xxxx because it is either not a supported file type
or because the file has been damaged (for example, it was sent as an email
attachment and wasn't correctly decoded).
(
http://forums.adobe.com/thread/391712).이 문제는이 정확한 문제를 해결하지만 현재는 해결되지 않았습니다. 사용자가 게시 한 모든 대안 (콘텐츠 형식 :/pdf가 아닌/옥텟, 처리 : 인라인이 아닌 응용 프로그램, 다른 콘텐츠 인코딩 및 문자 집합 등)을 시도했지만 아무 소용이 없습니다.
누구든지이 문제가 발생하기 전에 내가 어딘가에 막연하게도 옳은 방향과 원격으로 유사한 것을 대략적으로 가리킬 수 있는지 궁금합니다.
내가 볼 수있는 샘플 손상된 PDF 파일이 있습니까? – iPDFdev
"분명히 Adobe Reader는 저장시 이진 객체에 파일 이름을 임베드했습니다."이 사실이 아닙니다 ... 처음에는 일반적으로 Adobe Reader가 PDF 파일을 생성하지 않습니다. 나는 당신의 문제를 해결 한 것이 무엇인지 모르지만, 99.9999 %가 이것이 원인이 아니라는 것을 확신합니다. – yms
흠, 콘텐츠 처리시 보낸 원래 파일 이름이있는 경우에만 열립니다. 그것은 무언가에 대해 유효성을 검증해야합니다. - PDF를 만든 응용 프로그램에 포함되어 있다고했지만 파일 시스템 내에서 파일 이름이 바뀌면 유지해야 할 필요가 있음을 깨달았습니다. 파일 시스템이 다시 포함될 것이라고 상상할 수 없습니다. 자신의 경로지만, de-constructive pov에서 정확한 파일 이름을 보낼 때만 작동한다면이 파일 이름은 일치를 인식하기 위해 바이너리 객체의 어딘가에 삽입되어야합니다. –