2016-10-18 7 views
0

ブロブのコンテナからファイルをダウンロードしています&ストリームに保存& pdfを読もうとしています。ストリームからPDFを読み取っているときにPDFヘッダーの署名が見つかりませんでした

  //creating a Cloud Storage instance 
     CloudStorageAccount StorageAccount = CloudStorageAccount.Parse(connectionstring); 
     //Creating a Client to operate on blob 
     CloudBlobClient blobClient = StorageAccount.CreateCloudBlobClient(); 
     // fetching the container based on name 
     CloudBlobContainer container = blobClient.GetContainerReference(containerName); 
     //Get a reference to a blob within the container. 
     CloudBlockBlob blob = container.GetBlockBlobReference(fileName); 
     var memStream = new MemoryStream(); 
     blob.DownloadToStream(memStream); 
     try 
     { 
      PdfReader reader = new PdfReader(memStream); 
     } 
     catch(Exception ex) 
     { 

     } 

例外:PDFヘッダシグネチャが見つかりません。

blob.DownloadToStream(memStream); 

がダウンロードされたコンテンツの後にストリームに右 を配置:コメント通過後のトラブルシューティング明らかであったとして

+0

だから、あなたは確信している、それは* * PDFファイルですか?ローカルファイルに保存して内容を検査しようとしましたか? –

+0

はい、ローカルに保存しようとしましたが動作します。しかし、なぜそれがストリームで動作していないのか分かりません。 –

+1

もう一つの理由は、 'DownloadToStream'を呼び出した後に、ストリームの位置がダウンロードされたコンテンツの*後に置かれ、' PdfReader'が現在どこからでもPdfを読むことができるということです。 'DownloadToStream'の後にこのコード行を追加してみてください:' memStream.Position = 0; ' –

答えて

2

理由は、この行ということでした。

次に、pdfリーダーオブジェクトを構築するときに、Pdfファイルが現在の位置から見つかると予想されました。

これは、最初に何かを書き込んだ後でそのストリームを読み込もうとするストリームに対処するときによくある問題です。必要に応じてストリームの位置を変更する必要があります。この場合

、ストリーム内の唯一のPDFがあると仮定すると、ソリューションはpdfファイルを読み込もうとする前に戻ってスタートへのストリームの位置を変更することです:

次の行を追加します。

memStream.Position = 0; 
ダウンロード後、しかしリーダーが再配置される前に、

が読み取られます。

は、ここでのコードは、この地域でのように見えることができるものです。

blob.DownloadToStream(memStream); 
memStream.Position = 0; // <----------------------------------- add this line 
try 
{ 
    PdfReader reader = new PdfReader(memStream); 
関連する問題