我需要提供文件下载功能,其中Web服务器从另一个源(通过HTTP)检索文件,并同时将其流式传输到浏览器。我猜测使用MVC的Controller.File ActionResult不起作用,但无论如何我写了这样的原型:
public ActionResult Download()
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://somewhere/somefile.pdf");
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream stream = webResponse.GetResponseStream();
var mimeType = "application/pdf";
var fileName = "somefile.pdf";
return File(stream, mimeType, fileName);
}
这很好用,但是在return语句之后无法在HttpWebResponse和Stream上调用Close()。 HttpWebResponse.GetResponseStream方法上的help说:“您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以便重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。无法关闭流将导致您的应用程序用完连接。“
我是否应该创建一个HttpHandler并从源流中手动读取字节并将其写入响应,沿this或this行?还有其他方法我不知道吗?
答案 0 :(得分:0)
虽然我并不是直接熟悉尝试类似这样的东西,但我的第一个问题就是你在流中读取,关闭连接,然后返回字节作为响应。作为一个流,我不知道如何将它打开以便像在原型中那样返回其内容,但是当你完成时可以关闭它。