|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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
你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的) |
|