通过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。我们来看下生成的效果图:
![](http://www.xueit.com/upload/pic/200912/200912241353462.PNG)
运行效果图1
![](http://www.xueit.com/upload/pic/200912/200912241354082.PNG)
生成后文件
打开生成的静态文件
怎么样,不错吧。
有了这个方法,可以很简单的通过动态文件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预先保存的文件名,这样就可以生成静态文件了。
以上的做法是不使用模板来生成静态文件的方法,只是换个思路来做,有好建议可以上我的站 一起来交流下。