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

通过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 [http://www.xueit.com]
 
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> /// <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 [http://www.xueit.com]
 
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> /// <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 [http://www.xueit.com]
 
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 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,在后台添加保存文章后,调用方法:

 Code [http://www.xueit.com]
 
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 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预先保存的文件名,这样就可以生成静态文件了。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值