ASP.NET网站制作之技能:Asp.net间接保留文件到客户端
c++是语言,其实C++和java的应用范围根本就不一样的。在java应用的领域内,c++是不合适的。所以微软才搞了C#和Java对抗。asp.net|技能|客户端在我们的体系的编写过程当中,应当有良多的时分必要客户下载文件.我第一次的做法(应当也是年夜部分人的做法吧?)是:1HttpResponseresponse=HttpContext.Current.Response;
2stringjs="<scriptlanguage=javascript>window.open({0});</script>";
3js=string.Format(js,url);
4response.Write(js);
5
可是有个成绩了,就是会被告白拦阻软件间接拦阻失落,另我十分的头痛,因而寻觅更好的办理办法.看了用Response.BinaryWrite写文件流一文以后以为的确能够云云,修正代码以下:
1/**//**//**////<summary>
2/**////下载文件
3/**////</summary>
4/**////<paramname="filename">文件物理地点</param>
5
6protectedvoidDownloadFile(stringfilename)
7...{
8stringsaveFileName="test.xls";
9intintStart=filename.LastIndexOf("")+1;
10saveFileName=filename.Substring(intStart,filename.Length-intStart);
11FileStreamMyFileStream;
12longFileSize;
13
14MyFileStream=newFileStream(filename,FileMode.Open);
15FileSize=MyFileStream.Length;
16
17byte[]Buffer=newbyte[(int)FileSize];
18MyFileStream.Read(Buffer,0,(int)FileSize);
19MyFileStream.Close();
20
21Response.AddHeader("Content-Disposition","attachment;filename="+saveFileName);
22Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
23Response.ContentType="application/vnd.ms-Excel";
24
25Response.BinaryWrite(Buffer);
26Response.Flush();
27Response.Close();
28Response.End();
29
30}
可是有个严峻的成绩,就是文件格局。如许只是将流输入,且没法准确辨认格局。还好,强人层见叠出,柚子Nan提出了可否不思索文件的范例,间接把文件显现到扫瞄器(Response)的设法恰好切中我的关键地点,因而仓卒研讨了柚子Nan的设法,修正出最初代码:
1/**//**//**////<summary>
2/**////下载文件
3/**////</summary>
4/**////<paramname="filename">文件物理地点</param>
5protectedvoidDownloadFile(stringfilename)
6...{
7stringsaveFileName="test.xls";
8intintStart=filename.LastIndexOf("")+1;
9saveFileName=filename.Substring(intStart,filename.Length-intStart);
10
11Response.Clear();
12Response.Charset="utf-8";
13Response.Buffer=true;
14this.EnableViewState=false;
15Response.ContentEncoding=System.Text.Encoding.UTF8;
16
17Response.AppendHeader("Content-Disposition","attachment;filename="+saveFileName);
18Response.WriteFile(filename);
19Response.Flush();
20Response.Close();
21
22Response.End();
23}
利用今天Asp.net间接保留文件到客户端中的办法,经由我的重复测试,各式文档都运转完整一般。因而昨晚修正了现有代码,修正了下载办法,以办理一向困扰本人的窗口拦阻成绩。
早上原本还志得意满,这下不再用老跟客户注释为何窗口会没失落了。惋惜啊,千算万算,不值天一划。
早上客户就反应下载的文件满是乱码。立马在本机举行测试,没成绩。再同事的呆板上实验,一样没成绩。
那应当是客户真个成绩才是。只好让客户NetMeeting演示一下她的操纵历程。下载-〉保留-〉翻开。这么复杂的流程,不会做错吧?
正在忧郁之际,俄然脑光一闪,终究发明纷歧样的中央,立马实验,公然云云!
究竟有甚么区分呢?请看操纵图:
主人操纵图
我的操纵图
列位应当看出分歧的地方了吧?还看不出来?
这件事变的祸首罪魁就是:
办理办法:利用lovecherry的怎样从注册表读取文件的ContentType一文的办法
修改代码:
1/**////<summary>
2///下载文件
3///</summary>
4///<paramname="filename">文件物理地点</param>
5protectedvoidDownloadFile(stringfilename)
6{
7
8stringsaveFileName="test.xls";
9intintStart=filename.LastIndexOf("")+1;
10saveFileName=filename.Substring(intStart,filename.Length-intStart);
11
12System.IO.FileInfofi=newSystem.IO.FileInfo(filename);
13stringfileextname=fi.Extension;
14stringDEFAULT_CONTENT_TYPE="application/unknown";
15RegistryKeyregkey,fileextkey;
16stringfilecontenttype;
17try
18{
19regkey=Registry.ClassesRoot;
20fileextkey=regkey.OpenSubKey(fileextname);
21filecontenttype=fileextkey.GetValue("ContentType",DEFAULT_CONTENT_TYPE).ToString();
22}
23catch
24{
25filecontenttype=DEFAULT_CONTENT_TYPE;
26}
27
28
29Response.Clear();
30Response.Charset="utf-8";
31Response.Buffer=true;
32this.EnableViewState=false;
33Response.ContentEncoding=System.Text.Encoding.UTF8;
34
35Response.AppendHeader("Content-Disposition","attachment;filename="+saveFileName);
36Response.ContentType=filecontenttype;
37
38Response.WriteFile(filename);
39Response.Flush();
40Response.Close();
41
42Response.End();
43}
44
最初得出结论:要完成柚子Nan提出的可否不思索文件的范例,间接把文件显现到扫瞄器(Response),有一种办法,让客户端都不要埋没已知的扩大名,可是这类办法是没法顺应年夜部分电脑利用者的(一样平常只要对照熟习电脑的人才网会如许做吧?)
bbs看中的办法,还没有试用,不晓得有无感化.
PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_
HandlesMyBase.Load
在此处安排初始化页的用户代码
界说是不是是SQLServer数据库,这里为False
DimblnIsSQLServerAsSystem.Boolean=False
DimstrSQLAsString
DimobjDatasetAsNewDataSet()
DimobjConnAsObject
DimstrCnnAsString
IfblnIsSQLServerThen
strCnn="UserID=sa;InitialCatalog=Northwind;DataSource=.NetSDK;"
objConn=NewSystem.Data.SqlClient.SqlConnection(strCnn)
objConn.Open()
DimobjAdapterAsNewSystem.Data.SqlClient.SqlDataAdapter()
strSQL="Select*fromcustomerswherecountry=USA"
objAdapter.SelectCommand=NewSystem.Data.SqlClient.SqlCommand(strSQL,objConn)
objAdapter.Fill(objDataset)
Else
strCnn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+Server.MapPath("Test.mdb")
objConn=NewSystem.Data.OleDb.OleDbConnection(strCnn)
objConn.Open()
DimobjAdapterAsNewSystem.Data.OleDb.OleDbDataAdapter()
strSQL="SelectTop10TitleFromDocument"
objAdapter.SelectCommand=NewSystem.Data.OleDb.OleDbCommand(strSQL,objConn)
objAdapter.Fill(objDataset)
EndIf
DimoViewAsNewDataView(objDataset.Tables(0))
DataGrid1.DataSource=oView
DataGrid1.DataBind()
objConn.Close()
objConn.Dispose()
objConn=Nothing
IfRequest.QueryString("bExcel")="1"Then
Response.ContentType="application/vnd.ms-excel"
从Content-Typeheader中往除charset设置
Response.Charset=""
封闭ViewState
Me.EnableViewState=False
DimtwAsNewSystem.IO.StringWriter()
DimhwAsNewSystem.Web.UI.HtmlTextWriter(tw)
猎取control的HTML
DataGrid1.RenderControl(hw)
把HTML写回扫瞄器
Response.Write(tw.ToString())
Response.End()
EndIf
EndSub
你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的) 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。 比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
页:
[1]