2010-08-05 172 views
1

我寫了下面的代碼從sharepoint下載文件。下載的文件只在某些機器上正常工作。對於其他人來說,它說文件已損壞。問題是MS Office和圖像文件,但是PDF沒有任何問題。我們發現腐敗問題是由於在文件內容的頂部添加了一個十六進制數字。當它被刪除時,文件被正確打開。十六進制字符已被描繪出來以字節表示文件大小。爲什麼這隻發生在某些機器上,我們該如何解決?ASP.NET下載的文件損壞

private void DownloadFile() 
{ 
    SPListItem item = GetFileFromSharepoint(); 

    if (item != null) 
    { 
     byte[] bytes = item.File.OpenBinary(); 
     Response.ClearContent(); 
     Response.ClearHeaders(); 
     string fileType = string.Empty; 
     fileType = item["FileFormat"].ToString(); 
     Response.AppendHeader("Content-Disposition", 
           string.Format("attachment; filename= {0}", item["Filename"].ToString().Replace(" ", ""))); 
     Response.ContentType = GetContentType(fileType); 
     //Check that the client is connected and has not closed the connection after the request 
     if (Response.IsClientConnected) 
     { 
      Response.BinaryWrite(bytes); 
     } 
    } 

    Response.Flush(); 
    Response.Close(); 
} 

回答

0

the documentation從,它會出現表明:

如果 大小的文件的是0(零)字節OpenBinary方法失敗。

您確定此函數的返回值是否正確?您沒有檢查bytes陣列的長度。

更新:

也許經過SPOpenBinaryOptions.UnprotectedOpenBinary可能會奏效?