我试图在WCF 3.5中使用REST样式的URL而不是SOAP返回流。其想法是从SharePoint2010中读取一个文件,然后将其传递回客户端。(我们有理由这样做,而不是使用SharePoint服务,但我跑题了。)似乎发送文件的唯一方法是使用一个FileStream
将其写入文件系统,然后使用File.OpenRead
将流返回到客户端。使用MemoryStream
似乎不起作用。IE提示保存文件,但文件显示为2KB,然后无法读取,因为它并不全部存在。有什么想法吗?
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;
}
从技术上讲,OpenBinaryStream只返回一个通用的Stream实例,而不是MemoryStream(http://msdn.microsoft.com/en-us/library/ms470901.aspx)。如果你想要一个MemoryStream,你需要创建一个新的,并将内容从BinaryStream复制到MemoryStream中,然后重置位置并返回。