使用下面的代码我无法显示打开/另存为文件对话框:
public void ProcessRequest(HttpContext context)
{
string link = context.Request.QueryString["Link"];
string extension = Path.GetExtension(link);
string fileName = Path.GetFileName(link);
string fullPath =
String.Format("{0}\\{1}",
context.Server.MapPath("~/Content/Uploads/"),
fileName);
if (File.Exists(fullPath))
{
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader(
"Content-Length",
new FileInfo(fullPath).Length.ToString());
string contentType;
switch (extension)
{
default:
contentType = "application/octet-stream";
break;
}
context.Response.ContentType = contentType;
context.Response.AddHeader(
"Content-Disposition",
String.Format("attachment; filename={0}", fileName));
context.Response.WriteFile(fullPath, true);
context.Response.Flush();
}
}
我尝试关闭响应,将响应保持打开状态,使用TrasmitFile()
,但我从未得到任何对话或任何反馈。我也尝试过调试它,但没有抛出异常。在 IE 7/8 和 Chrome 中尝试过。任何帮助表示赞赏。
Thanks!
下面是 Fiddler 的输出:
HTTP/1.1 200 OK 缓存控制:私有
内容长度:3813 内容类型:
应用程序/八位字节流服务器:
Microsoft-IIS/7.5 内容处置:
依恋;
文件名=b1af9b34-28cc-4479-a056-8c55b41a5ece.txt
X-AspNet-版本:4.0.30319
X-Powered-By:ASP.NET 日期:23 日,星期四
2010 年 12 月 21:51:58 GMT
* Home
* Hotels
* Reviews
* Community
* Travel Guide
* Travel Insurance
* Contact us
* FIDDLER:RawDisplay 被截断为 128 个字符。右键单击以禁用
截断。 *
终于想通了。其实我贴的代码没有问题。正如您在 Fiddler 输出中看到的,文本文件的内容已成功写入响应流,并且使用的标头也正确。实际的问题来自于实际的http请求是如何发出的。我用了一个
$.get(urlToGenericHandler);
使用 jQuery 请求。具体来说,我无法使用 AJAX 或回调模型下载文件的原因超出了本答案的范围。查看支持的 jQuery 数据类型here http://api.jquery.com/jQuery.ajax/
不管怎样,我将调用从使用 AJAX 更改为使用基本的回发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)