就是我进入一个页面后,看到一个链接,上面的后缀名是.DOC格式的,我点击后就可以直接下载了,这是怎么做的,谁会,教下

解决方案 »

  1.   


    var href = "<%= Url.Content("~/....../printFile?....;
    window.open(href,"_blank",null);
      

  2.   

    public class DownloadHandler : IHttpHandler
        {
            /// <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);//解密下载
      

  3.   

    这是后台下载方法printFile里面的代码,其他自己写:
    //取得下载服务器路径,并设定下载格式。
    string url = ConfigurationManager.AppSettings["xxx"] + "InMsgList&rs:Command=Render&rs:Format=PDF";
    //生成下载数据
    byte[] data = ReportingUtil.PrintURL(url + res);
    //打开下载窗口
    return new FileContentResult(data, "application/pdf");
      

  4.   

    那是他写成那样的而已,那个连接地址直接指向你的DOC即可!不用写多余的代码