2009-05-01 10 views
1

DB에 이미지와 파일을 업로드하는 C# 코드가 있습니다. 현재 나는 그것이 mimetypes의 목록에 맞는 모든 문서에서 작동한다고 생각했습니다. 그러나 그것은 일부 PDF 파일에 실패합니다.DB에 파일 업로드 v1.3

일부 pdf는 1.3 형식이고 일부는 1.4 형식입니다. 1.4는 제대로 작동하지만 1.3은 업로드되지 않으며 런타임 오류가 발생하지 않습니다. 단지 추가되지 않습니다.

PDF를 업로드 현재 코드의 일부는 마임 유형으로 "응용 프로그램/PDF"를 찾고 PDF 년대 들어

Checks for valid MIME Type 
... 

byte[] fileData = new byte[uploadFile.ContentLength]; 
uploadFile.InputStream.Read(fileData, 0, uploadFile.ContentLength); 

... 
Continues on to Uploads to db. 

입니다. 필자는 1.3 형식의 pdfs에 다른 유형이 있다고 생각하지 않지만 아마도 잘못되었습니다.

다른 누구도이 문제가 발생하기 전에 해결 방법에 대한 조언을 구하십니까?

+0

PDF 파일의 크기는 얼마입니까? –

+0

이 하나는 16kb뿐입니다. 이미 1.4 메가 바이트 형식으로 2 메가 바이트에 가까운 파일을 업로드했습니다. 나는 그것이 크기라고 생각하지 않는다. – corymathews

답변

0

그것은 단지 어리석은 실수였던 것 같습니다. 파일의 확장자는 .pdf 인 나머지 파일과는 달리 .PDF 확장자입니다. 멍청한 모자가 날 잡았어. 약간의 추가 디버그 명령문이 트릭을 수행했습니다.

1

문제 이 입력 스트림에서 읽는 방식이 될 수 있습니다.

스트림을 처리 할 때마다 각 반복에서 반환 값을 기록하면서 반복적으로 읽어야합니다. 따라서 원래 코드는 다음과 같아야합니다.

byte[] fileData = new byte[uploadFile.ContentLength]; 
int totalRead = 0; 
while (totalRead < fileData.Length) 
{ 
    int read = uploadFile.InputStream.Read(fileData, totalRead, 
              fileData.Length - totalRead); 
    if (read == 0) 
    { 
     throw new IOException("Input data was truncated"); 
    } 
    totalRead += read; 
} 

그러나 이는 문제가되지 않을 수 있습니다. 잘린 데이터가 아니라 데이터가 완전히 없어지기를 기대합니다. 당신이 "그냥 추가되지 않는다"고 말할 때 당신은 더 구체적 일 수 있습니까? 얼마나 많은 로깅을 넣었습니까? 실제로 데이터를 데이터베이스에 삽입하는 코드는 어디에 있습니까? 실패한 경우 로그에 어떤 MIME 유형이 표시됩니까?

여분의 로깅이 아마도 의 차이가있을 것 같습니다. 차이점은 ... 현재 어디에서 잘못 되었습니까, 아니면 방금 말씀하지 않은 것입니다. 로깅은이를 명확하게해야합니다.

0

나는이 질문에 대한 John Skeet의 답변에 동의합니다. 어도비가 PDF 1.4에 몇 가지 새로운 압축 기술을 추가했기 때문에 차이가있을 수 있습니다. 따라서 1.4 PDF는 1.3 PDF보다 훨씬 작을 수 있습니다. 따라서 루프에서 읽어야 할 필요성은 결과적으로 v1.3 PDF 만 나타낼 수 있습니다. (다만 추측 일뿐입니다)

0

아마 pdf의 버전이 아닙니다. Adobe는 1.4에서 선형화 된 pdfs를 도입하지 않았습니까?

"빠른 웹보기"pdf로 데이터를 즉시 이용할 수 있으며 표준 PDF로 업로드가 완료 될 때까지 데이터를 사용할 수 없습니다. 전송이 완료되기 전에 db에 쓰기를 시도하면 표준화 된 pdf가 아니라 선형화 된 pdf와 함께 작동합니다.

어느 쪽이든, 존 스키켓이 맞습니다. 로깅 또는 적절하게 배치 된 중단 점은 알려줍니다.

관련 문제