- 浏览: 2113733 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
通过ASP.NET生成静态文件的文章网上有好多文章,而本站也有不少的相关文章教程,通常ASP.NET生成静态文件的做法是使用文件流读取模板内容,之后替换模板内容中相关关键字,再生成静态文件。本文的做法另类一点,通过URL来生成静态文件,下面来看下是如何实现吧。
创建一个TestWeb.aspx文件,这个文件后台.cs的代码做法步骤如下:
第1步:先引用如下命令空间
using System;
using System.Net;
using System.IO;
using System.Text;
第2步:创建获取远程URL并生成文件的方法与文件夹不存在则自动建立方法
获取远程URL并生成文件的代码:
<!-- 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。
文件夹不存在则自动建立的代码:
<!-- 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()方法,以获取百度首页生成静态文件
<!-- 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 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预先保存的文件名,这样就可以生成静态文件了。
以上的做法是不使用模板来生成静态文件的方法,只是换个思路来做,有好建议可以上我的站 一起来交流下。
发表评论
-
where T:new() 是什么意思
2014-04-18 09:26 1400where T:new() 是什么意思 经常看到方法后面 ... -
为何在wpf中textbox的值有时不会实时的变化
2013-11-03 19:31 1362TextBox绑定view model 中的一个属性,如果T ... -
好久没写blog了
2012-05-21 18:43 2好久没写blog了 -
使用MySQL命令行修改密码
2011-07-27 20:37 1025使用MySQL命令行修改密码 下面为您额极少的My ... -
更改lnmp安装后的MySQL密码方法
2011-07-27 20:36 1394更改lnmp安装后的MySQL密码方法 2011-07- ... -
mysql-bin.000001文件的来源及处理方法[转]
2011-07-27 20:31 1253mysql-bin.000001文件的来 ... -
lnmp vps下mysql备份
2011-07-27 20:31 1009mysql-bin.000001文件的来 ... -
N点虚拟主机管理系统安装图解
2011-07-25 00:13 1803<script type="text/j ... -
CentOS 6.0正式版终于发布
2011-07-24 10:29 1567CentOS 6.0新在什么地方 ... -
关系数据库还是NoSQL数据库
2011-07-22 16:35 915关系数据库还是NoSQL数据库 作者 孙立 发布于 2 ... -
关系数据库还是NoSQL数据库
2011-07-22 16:31 1043关系数据库还是NoSQL数据库 作者 孙立 发布于 2 ... -
NoSQL开篇——为什么要使用NoSQL
2011-07-22 16:26 1015NoSQL开篇——为什么要使用NoSQL 作者 孙立 发布 ... -
HubbleDotNet开源全文搜索数据库项目--技术详解
2011-07-21 17:49 1143HubbleDotNet开源全文搜索数据库项目--技术 ... -
细说 Form (表单)
2011-07-21 12:27 1207细说 Form (表单) Form(表单)对于每 ... -
ASP.NET(C#)常用数据加密和解密方法汇总
2011-07-21 12:26 1317应同事所邀把ASP.NET(C#)常用数据加密和解密方法 ... -
ds
2011-07-21 09:44 962blog%5Borigin%5D=0&blog%5Bc ... -
ds
2011-07-21 09:42 931请输入文章内容dsafas -
test
2011-07-21 09:31 864testestestestestestestestestest ... -
判断两个数组中是否存在相同的数字
2010-06-17 09:03 2127判断两个数组中是否存在相同的数字 给定两个排好序的数 ... -
用C#读取XML文档
2010-04-06 09:15 1539本文将以一个非常简单 ...
相关推荐
在ASP.NET中,可以创建ASP.NET网站和ASP.NET应用程序,ASP.NET网站的网页元素包含可视元素和页面逻辑元素,并不包含designer.cs文件。而ASP.NET应用程序包含designer.cs文件。创建ASP.NET网站,首先需要创建网站,...
VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...
n923 打开远程服务器上的配置文件 n924 使用Configuration类 n925 修改配置节 n926 准备创建新的网站 n93 创建自定义配置节 n94 创建加密的配置节 n941 使用aspnet_regiis工具加密配置节 n942 以编程方式加密配置节 ...
本程序无需数据库支持,实时获取远程网站内容实现本地歌谱搜索。整站歌谱数量近9万篇。 本程是个人学习程序,数据来源于:找歌谱网。 本人分享本程序只是抱于一种学习、共享的精神。若由于本程序引起的第三方责任...
第2章 ASP.NET运行模型 12.如何定义变量和判定变量类型 13.什么是变量的作用域 14.如何强制要求显式声明变量 15.如何保留或消除过程调用对变量的影响 16.如何创建和调整动态数组 18.如何计算中英文混合字符串的...
8)修正获取远程页面功能在获取部分页面时乱码的BUG! 9)增加批量上传文件的功能,同时优化了所有模块的上传文件功能。 10)所有弹出的模态窗口现在可根据内容自动调整高度及宽度,杜绝旧版本在一些浏览器下显示窗口...
但是,重要的是:这个字符串是从Web上远程获取的,但是调用代码时与在本地一样!3. Delphi .NET版本的Web Browser开发(使用InterOp实现Win32代码调用)--------ActiveX.Web.Browser.DemoDEMO.avi--------有想到过...
许多人遇上问题,因为随 ASP.NET一起发布的来建立这些数据定义的内置.SQL 脚本在安装时(install-time)需要DBO权限,但很多主机供应商对此并不支持(注:脚本在运行时(runtime)不需要DBO权限,只是在安装时(install ...
可把图片远程保存到本地 7.(改进)独创的渐飞智能标签,可组合实现超过10000种调用效果 8.(改进)强大的自定义文件功能,支持静态文件及js 9.(改进)资讯统计功能,后台:可根据录入用户、作者、编辑等方式...
8)修正获取远程页面功能在获取部分页面时乱码的BUG! 9)增加批量上传文件的功能,同时优化了所有模块的上传文件功能。 10)所有弹出的模态窗口现在可根据内容自动调整高度及宽度,杜绝旧版本在一些浏览器下显示窗口内容...
一般的虚拟主机都有这些组件,如果是本地调试必须先检查一下IIS的设置环境,并安装上面前三个组件,组件下载地址见本文附录。 3、数据库:SQL2000+以上!初始安装大约35Mb左右,完善支持SQL2005/2008! 4、空间...
实例110 使用toLocaleString()方法获取本地时间 176 实例111 全中文显示日期 176 实例112 在状态栏中显示日期时间 178 实例113 使用数组显示星期 179 实例114 在表格中显示时间 180 实例115 退出页面时显示停留时间 ...
作者主页有很多语法自动完成文件下载,地址 http://editplus.com/files.html 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis) 在“工具→参数选择→用户工具”选项页设置,...
foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下: foreach (type identifier in expression) statement 若要循环访问集合,集合必须满足特定的...