查看: 6976|回复: 0
打印 上一主题 下一主题

ASP.NET获取远程网页下载到本地文件

[复制链接]
跳转到指定楼层
1#
发表于 2009-12-25 14:00:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
通过ASP.NET生成静态文件的文章网上有好多文章,而本站也有不少的相关文章教程,通常ASP.NET生成静态文件的做法是使用文件流读取模板内容,之后替换模板内容中相关关键字,再生成静态文件。本文的做法另类一点,通过URL来生成静态文件,下面来看下是如何实现吧。

创建一个TestWeb.aspx文件,这个文件后台.cs的代码做法步骤如下:

第1步:先引用如下命令空间

using System;

using System.Net;
using System.IO;
using System.Text;

第2步:创建获取远程URL并生成文件的方法与文件夹不存在则自动建立方法

获取远程URL并生成文件的代码:

C# Code
       /// <summary>
        /// 生成网页文件
        /// </summary>
        /// <param name="url">远程URL</param>
        /// <param name="filename">生成文件名路径</param>
        /// <param name="pagecode">目标URL页面编码</param>
        protected void DownUrltoFile(string url, string filename, string pagecode)
        {
            try
            {
                //编码
                Encoding encode = Encoding.GetEncoding(pagecode);
                //请求URL
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                //设置超时(10秒)
                req.Timeout = 10000;
                this.NotFolderIsCreate(filename);
                //获取Response
                HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
                //创建StreamReader与StreamWriter文件流对象
                StreamReader sr = new StreamReader(rep.GetResponseStream(),encode);
                StreamWriter sw = new StreamWriter(Server.MapPath(filename), false,encode);
                //写入内容
                sw.Write(sr.ReadToEnd());
                //清理当前缓存区,并将缓存写入文件
                sw.Flush();
                //释放相关对象资源
                sw.Close();
                sw.Dispose();
                sr.Close();
                sr.Dispose();
                Response.Write("生成文件"   filename   "成功");
            }
            catch (Exception ex)
            {
                Response.Write("生成文件"   filename   "失败,原因:"   ex.Message);
            }
        }
以上代码关键知识点,通过HttpWebRequest、HttpWebResponse请求获取远程URL数据,之后使用StreamReader、StreamWriter文件流读写数据写入文件,注意还有编码Encoding。

文件夹不存在则自动建立的代码:

C# Code
        /// <summary>
        /// 文件夹不存在则创建
        /// </summary>
        /// <param name="filename">文件名所在路径</param>
        protected void NotFolderIsCreate(string filename)
        {
            string fileAtDir = Server.MapPath(Path.GetDirectoryName(filename));
            if (!Directory.Exists(fileAtDir))
                Directory.CreateDirectory(fileAtDir);
        }
下面我们看下如何调用生成文件。

在Page_Load中调用DownUrltoFile()方法,以获取百度首页生成静态文件



C# Code
        protected void Page_Load(object sender, EventArgs e)
        {
            //调用方法
            this.DownUrltoFile("http://www.baidu.com", "html/baidu.htm", "GB2312");
        }
因为百度首页是Gb2312编码,所以上面的调用方法输入GB2312。我们来看下生成的效果图:



运行效果图1



生成后文件



打开生成的静态文件

怎么样,不错吧。

有了这个方法,可以很简单的通过动态文件URL来生成静态文件了,比如:

新闻资讯表article有一个字段htmlFile,保存资讯文件名的,内容如html/news/20091224-001.html,在后台添加保存文章后,调用方法:


DownUrltoFile("http://www.xueit.com/show.aspx?pid=1", "html/news/20091224-001.html", "GB2312");
其中URL:http://www.xueit.com/show.aspx?pid=1 是动态显示文章,html/news/20091224-001.html是表字段htmlFile预先保存的文件名,这样就可以生成静态文件了。

以上的做法是不使用模板来生成静态文件的方法,只是换个思路来做,有好建议可以上我的站 一起来交流下。

作者:dodo

出处:http://www.xueit.com/html/2009-12-24/21-1630623130921.html
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表