2009-05-01 19 views
1

イメージとファイルをdbにアップロードするC#コードがあります。現在、私はそれがmimetypeのリストに適合するすべてのドキュメントのために働いていると思っていました。しかし、それはいくつかのPDFで失敗します。DBへのPDF v1.3のアップロード

私はいくつかのpdfファイルが1.3形式であり、いくつかは1.4形式であるという事実に絞り込んでいます。 1.4は正常にアップロードされていますが、1.3はアップロードされず、ランタイムエラーは発生せず、追加されません。

PDFファイルをアップロードするための現在のコードの一部は、それがMIMEタイプとして「アプリケーション/ 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.4MBのものを2MB近くアップロードしています。私はそれがサイズだとは思わない – 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

私はこの質問に対するJon Skeetの回答に同意します。違いはおそらくAdobeがPDF 1.4にいくつかの新しい圧縮技術を追加したため、1.4 PDFが1.3 PDFよりも大幅に小さくなる可能性があるからです。したがって、ループで読み込む必要があるのは、結果としてv1.3のPDFのみに現れることがあります。 (しかしそれはちょうど推測です)

0

多分それはpdfのバージョンではありません。 Adobeは1.4で線形化pdfsを導入していないのですか?

データは「高速ウェブビュー」pdfですぐに利用でき、アップロードが標準のpdfで終了するまでデータは利用できません。転送が完了する前にdbに書き込もうとすると、線形化されたpdfで動作し、標準のpdfでは動作しない可能性があります。

いずれにしても、ジョン・スケートは正しいです。ロギングまたは適切に配置されたブレークポイントはあなたに伝えます。

関連する問題