vto*_*ola 25 .net c# asp.net stream httpresponse
我正在使用ASP.NET HttpHandler进行测试,以便直接在响应流上下载文件,而且我不太确定我的方式.这是一个示例方法,将来文件可以存储在数据库中的BLOB中:
public void GetFile(HttpResponse response)
{
String fileName = "example.iso";
response.ClearHeaders();
response.ClearContent();
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), fileName), FileMode.Open))
{
Byte[] buffer = new Byte[4096];
Int32 readed = 0;
while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, readed);
response.Flush();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是否正确或有更好的方法来做到这一点.我的问题是:
很抱歉这么多问题,我在网络开发方面很新:P
干杯.
SLa*_*aks 17
Content-Disposition标题).因此,它不知道显示文件对话框.该Content-Length头只有在整个响应缓存被设置(如果您不冲水),或者如果你自己设置它.在这种情况下,您可以并且应该自己设置它; 写
response.AppendHeader("Content-Length", new FileInfo(path).Length.ToString());
Run Code Online (Sandbox Code Playgroud)Flush在循环内部调用,您可以立即向线路发送响应,而无需任何缓冲.但是,为了增加性能,您可以使用GZIP压缩.| 归档时间: |
|
| 查看次数: |
8457 次 |
| 最近记录: |