2013-02-16 84 views
-1

我正在使用Azure處理Asp.Net MVC應用程序。當我將PDF文檔上傳到Azure blob存儲時,它將通過使用下面的代碼完美地上傳。未找到PDF頭標籤錯誤?

  var filename = Document.FileName; 
      var contenttype = Document.ContentType; 

      int pdfocument = Request.ContentLength; 

     //uploading document in to azure blob 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

      var storageAccount = CloudStorageAccount.DevelopmentStorageAccount(FromConfigurationSetting("Connection")); 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      CloudBlobContainer container = blobClient.GetContainerReference("containername"); 
      container.CreateIfNotExists(); 
      var permissions = container.GetPermissions(); 
      permissions.PublicAccess = BlobContainerPublicAccessType.Blob; 
      container.SetPermissions(permissions); 
      string uniqueBlobName = string.Format(filename); 
      CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName); 
      blob.Properties.ContentType = ; 
      blob.UploadFromStream(Request.InputStream); 

將文檔上傳到blob後嘗試讀取pdf文檔,收到錯誤「找不到PDF頭標記」。這erorr代碼

  byte[] pdf = new byte[pdfocument]; 
      HttpContext.Request.InputStream.Read(pdf, 0, pdfocument);    
      PdfReader pdfReader = new PdfReader(pdf);  //error getting here   

還有一件事我忘了即如果我們評論上面的代碼(在天青BLOB文件上傳),那麼我沒有得到這個錯誤。

回答

0

在您的組合使用案例中,您嘗試兩次讀取Request.InputStream,一次在上傳過程中,一次在嘗試讀取到byte[] pdf ---當您首先閱讀它時,讀取它直到它結束,因此第二次閱讀最有可能沒有得到任何數據。

正如你反正打算閱讀PDF到內存中(上述提到的byte[] pdf),你在結合使用的情況下能

  • 首先將數據讀入該數組

    int pdfocument = Request.ContentLength; 
    byte[] pdf = new byte[pdfocument]; 
    HttpContext.Request.InputStream.Read(pdf, 0, pdfocument); 
    
  • 然後上傳該陣列使用CloudBlob.UploadByteArray

    var storageAccount = CloudStorageAccount.DevelopmentStorageAccount(FromConfigurationSetting("Connection")); 
    [...] 
    CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName); 
    blob.Properties.ContentType = ; // <--- something missing in your code... 
    blob.UploadByteArray(pdf);  // <--- upload byte[] instead of stream 
    
  • 再餵你的PDF閱讀器

    PdfReader pdfReader = new PdfReader(pdf); 
    

這樣你讀取流只有一次,和一個byte []應該是可重複使用...

+0

安德魯你好,現在上傳字節數組進入BLOB而不是流現在出了PDF頭問題。感謝您的寶貴信息很多。我想問一個這樣的事情。當我在瀏覽器中打開PDF文檔時使用它打開的BLOB URL一個彈出。彈出窗口是「此文檔啓用了Adobe Reader中的擴展功能。該文檔自創建以來已更改,並且不再使用擴展功能。請聯繫作者以獲取本文檔的原始版本。「此錯誤獲取Adobe Reader 9.0版本,但沒有獲得11.0版本 – PCSSCP 2013-02-18 06:02:38

+0

上傳前是否也發生過相同的PDF?或者在上傳過程中做了些什麼?如果您不確定,請在上傳之前和之後提供PDF。 – mkl 2013-02-18 06:12:40

+0

這是發生在未經過的時候,當我在正常打開之前上傳該PDF文件時,不會彈出消息。 – PCSSCP 2013-02-18 10:14:52