就是我进入一个页面后,看到一个链接,上面的后缀名是.DOC格式的,我点击后就可以直接下载了,这是怎么做的,谁会,教下
解决方案 »
- 关于如何捕捉多标签浏览器的标签页关闭的问题
- 求UpdatePanel和UpdateProgress实现数据加载等待效果
- 怎么实现,编辑短信内容XX到XX,扣除手机费的这套技术?
- 高分求弹出窗口 返回选定TreeView值的代码(急)
- DropDownList 绑定了一个数组的问题
- 新手提问--框架问题
- 自定义控件的问题..
- 新手提问:运行ASP.NET时出现下面的问题,怎办?
- 不同浏览器下<iframe>页面显示不同怎么办
- 关于DataList分页的问题
- ============cookie共享问题
- 用模态窗口弹出一个页面可以调父窗体方法,但是用window.showModelessDialog弹出同一个页面,调方法时会报错
var href = "<%= Url.Content("~/....../printFile?....;
window.open(href,"_blank",null);
{
/// <summary>
///功能说明:文件下载类--不管是什么格式的文件,都能够弹出打开/保存窗口,
///包括使用下载工具下载
///继承于IHttpHandler接口,可以用来自定义HTTP 处理程序同步处理HTTP的请求
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
HttpResponse Response = context.Response;
HttpRequest Request = context.Request; System.IO.Stream iStream = null; byte[] buffer = new Byte[10240]; int length; long dataToRead; try
{
string filename = FileHelper.Decrypt(Request["fn"]); //通过解密得到文件名 string filepath = HttpContext.Current.Server.MapPath("~/") + filename; //待下载的文件路径 iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.Read);
Response.Clear(); dataToRead = iStream.Length; long p = 0;
if (Request.Headers["Range"] != null)
{
Response.StatusCode = 206;
p = long.Parse(Request.Headers["Range"].Replace("bytes=", "").Replace("-", ""));
}
if (p != 0)
{
Response.AddHeader("Content-Range", "bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length", ((long)(dataToRead - p)).ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.GetEncoding(65001).GetBytes(Path.GetFileName(filename)))); iStream.Position = p;
dataToRead = dataToRead - p; while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
length = iStream.Read(buffer, 0, 10240); Response.OutputStream.Write(buffer, 0, length);
Response.Flush(); buffer = new Byte[10240];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -1;
}
}
}
catch (Exception ex)
{
Response.Write("Error : " + ex.Message);
}
finally
{
if (iStream != null)
{
iStream.Close();
}
Response.End();
}
} public bool IsReusable
{
get { return true; }
}
} /// <summary>
/// 这里涉及到一个文件名加解密的问题,是为了防止文件具体名称暴露在状态栏中,所以添加一个FileHelper类
/// </summary>
public class FileHelper
{
/// <summary>
/// 利用Base64码对文件名进行加密处理。
/// </summary>
/// <param name="filename">文件名</param>
/// <returns></returns>
public static string Encrypt(string filename)
{
byte[] buffer = HttpContext.Current.Request.ContentEncoding.GetBytes(filename);
return HttpUtility.UrlEncode(Convert.ToBase64String(buffer));
} /// <summary>
/// 利用Base64码对文件名进行解密处理。
/// </summary>
/// <param name="encryptfilename">文件名</param>
/// <returns></returns>
public static string Decrypt(string encryptfilename)
{
byte[] buffer = Convert.FromBase64String(encryptfilename);
return HttpContext.Current.Request.ContentEncoding.GetString(buffer);
}
}string url = FileHelper.Encrypt(outFile);//对下载文件名进行加密
Response.Redirect("~/download.aspx?fn=" + url);//解密下载
//取得下载服务器路径,并设定下载格式。
string url = ConfigurationManager.AppSettings["xxx"] + "InMsgList&rs:Command=Render&rs:Format=PDF";
//生成下载数据
byte[] data = ReportingUtil.PrintURL(url + res);
//打开下载窗口
return new FileContentResult(data, "application/pdf");