给位大虾,怎样将指定的动态页面保存到本地,包括图片,是用asp。net实现的,小弟先谢谢各位大虾了。

解决方案 »

  1.   

    可以用采集获取图片和html,如果是aspx要用流输出using System;
    using System.Data;
    using System.IO;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class down : NetCMS.Web.UI.BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
                getDownInfo();
        }    /// <summary>
        /// 获取新闻附件下载信息
        /// </summary>
        protected void getDownInfo()
        {
            string id =Request.QueryString["id"];
            if (id != null && id != "")
            {
                NetCMS.Content.ContentManage news = new NetCMS.Content.ContentManage();
                string DownAdress = news.getNewsAccessory(int.Parse(id)).ToLower();
                DownAdress = DownAdress.Replace("{@dirfile}", NetCMS.Config.UIConfig.dirFile);
                DownAdress = DownAdress.Replace("{@dirtemplet}", NetCMS.Config.UIConfig.dirTemplet);
                string dimm = NetCMS.Config.UIConfig.dirDumm;
                if (dimm.Trim() != string.Empty)
                {
                    dimm = "/" + dimm;
                }
                
                DownAdress = dimm + DownAdress;
                using (FileStream fso = new FileStream(Server.MapPath(DownAdress), FileMode.Open,FileAccess.Read,FileShare.Read))
                {
                    string[] filename=DownAdress.Split(new char[]{'/'});
                    int len = Convert.ToInt32(fso.Length);
                    byte[] FileObj = new byte[len];
                    fso.Read(FileObj, 0, len);
                    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", HttpUtility.UrlEncode(filename[filename.Length - 1]), System.Text.Encoding.UTF8));
                    Response.AddHeader("Content-Length", len.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.Charset = "UTF-8";
                    Response.ContentEncoding = System.Text.Encoding.UTF8; 
                    Response.BinaryWrite(FileObj);
                    Response.Flush();
                    Response.Clear();
                    fso.Close();
                }
                //Response.Write("<script langauge=\"javascript\">self.location='" + DownAdress + "';</script>");
                //Response.End();
            }
            else
            {
                Err();
            }
        }    protected void Err()
        {
            Response.Write("<script language=\"javascript\">alert('参数传递错误!');history.back();</script>");
            Response.End();
        }
    }
      

  2.   


    你的意思就是要个另存为??
    //用这段。。把它下载下来///   <summary> 
    ///   文件下载 
    ///   </summary> 
    ///   <param   name= "FullFileName "> </param> 
    private   void   FileDownload(string   FullFileName) 

    FileInfo   DownloadFile   =   new   FileInfo(FullFileName);   
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.Buffer=false; 
    Response.ContentType= "application/octet-stream "; 
    Response.AppendHeader( "Content-Disposition ", "attachment;filename= "   +HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8)); 
    Response.AppendHeader( "Content-Length ",DownloadFile.Length.ToString()); 
    Response.WriteFile(DownloadFile.FullName); 
    Response.Flush(); 
    Response.End(); 
    }
      

  3.   

    是的,意思就下要把一个指定的网页以HTML的格式保存到本地,我自己做的是只能保存静态的东西,动态的是不能显示的。你给的这个方法的话好像不支持url格式的参数的,小弟是菜鸟,还请各位大虾多多帮助。
      

  4.   


    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml;
    using System.Net;
    using System.IO;
    using System.Text;
    namespace NetCMS.Web
    {
        public partial class AjaxGeturl : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    string url = string.Empty;
                    url = Request.QueryString["url"];
                    Response.Write(GetResStr(url, "utf-8"));
                    Response.End();
                }
            }
            string GetResStr(string url, string Encod)
            {
                WebRequest WReq;
                WebResponse WResp;
                StreamReader sr;
                WReq = WebRequest.Create(url);
                WResp = WReq.GetResponse();
                sr = new StreamReader(WResp.GetResponseStream(), Encoding.GetEncoding(Encod));
                string retValue = sr.ReadToEnd();
                sr.Close();
                return retValue;
            }
        }}
      

  5.   

    谢谢liuchaolin,这种方法我也试了,但是对于动态的的数据还是读不出,例如那些动态生成的导航和图片
      

  6.   

    是因为缓存问题,你要在采集的文件名后加随机数参数如abc.aspx?abc=13123(随机生成)