我的webapi方法即时使用此代码
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new PushStreamContent((stream, content, arg3) =>
{
using (var zipEntry = new Ionic.Zip.ZipFile())
{
using (var ms = new MemoryStream())
{
_xmlRepository.GetInitialDataInXml(employee, ms);
zipEntry.AddEntry("content.xml", ms);
zipEntry.Save(stream); //process sleep on this line
}
}
})
};
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "FromPC.zip"
};
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
return result;
我想
1)从_xmlRepository.GetInitialDataInXml
中获取数据2)通过Ionic.Zip快速压缩数据
3)返回压缩流作为我的WebApi操作的输出
但是在这行zipEntry.Save(stream);执行过程停止,不要转到下一行。并且方法不返回任何内容
那为什么它不会'给我回复文件?
答案 0 :(得分:1)
使用PushStreamContent
时,您需要close
信号流,表示您已完成写入信息流。
Remarks
部分:
http://msdn.microsoft.com/en-us/library/jj127066(v=vs.118).aspx
答案 1 :(得分:0)
接受的答案不正确。如果要开始流式传输,则无需关闭流。委托功能结束时,流式传输自动开始(浏览器中的下载对话框)。在大文件的情况下抛出OutOfMemoryException,但它被处理并且流式传输开始 - > HttResponseStream向客户端刷新。
$p("#flip_sector_"+sectionJs+"").click(function(){
$p("#panel_sectors_"+sectionJs+"").slideToggle("slow");sectionJs++;