2012-12-19 21 views
0

我想使用REST風格的URL而不是SOAP返回WCF 3.5中的流。這個想法是從SharePoint 2010中讀取文件,然後將其傳回客戶端。 (我們有做這種方式,而不是使用SharePoint服務的理由,但我離題了。)看來好像要發送的文件的唯一方法是使用一個FileStream將其寫入到文件系統,然後使用File.OpenRead返回流回來給客戶。使用MemoryStream似乎不起作用。 IE會提示保存文件,但是該文件就像2KB一樣下來,然後當然不能讀取,因爲它不是全部。有任何想法嗎?如何從WCF流式傳輸文件系統中沒有的文件。 (共享點內容數據庫)

SPListItemCollection lookupFld2 = docLibrary.GetItems(spQuery2); 

if (lookupFld2.Count > 0) 
{ 
    WebOperationContext.Current.OutgoingResponse.ContentType = 
     "application/octet-stream"; 

    WebOperationContext.Current.OutgoingResponse.Headers.Add(
     "Content-Disposition","attachment; filename=" + lookupFld2[0].File.Name); 

    MemoryStream memoryStream = 
     (MemoryStream)lookupFld2[0].File.OpenBinaryStream(); 

    memoryStream.Position = 0; 

    return memoryStream; 
} 

回答

0

技術上,OpenBinaryStream只返回一般流實例不是一個MemoryStream(http://msdn.microsoft.com/en-us/library/ms470901.aspx)。如果你想要一個MemoryStream,你需要創建一個新的,並將BinaryStream中的內容複製到MemoryStream中,然後重置位置並返回它。