按月存档: 03月 2009

附件下载直接显示另存为对话框并保存原有中文文件名的解决办法

一直都很想做这个功能,但没有时间去整理这次客户要求一定要做,只能做了一下。
 
原理其实很简单,就是修改一下HTTP的响应头信息就可以了。
 
因为我原来设计的时候就把附件的处理做成一个用户组件,所以修改起来也很简单,只要增加一个下载的界面及修改用户组件的内容即可。
具体步骤:
1、把原来显示附件的链接地址统一改为AttachDownload.aspx?attachid=xxxx
2、添加一个AttachDownload.aspx页面,具体的代码如下:
  
Code
 1 private void Page_Load(object sender, System.EventArgs e)
 2         {
 3             int iAttachID = 0;
 4             try
 5             {
 6                 iAttachID = Convert.ToInt32(this.Request["ATTACHID"].ToString());
 7             }
 8             catch(Exception ex)
 9             {  
10                 Response.Write("参数传递错误!"+ex.Message);
11                 Response.End();  
12             }
13 
14             DataTable dt = EOffice.DataAccess.SystemManage.BLOB.Query_BLOB(iAttachID,"",ref this.Exc,Global.Conn);
15             
16             if(dt.Rows.Count==1)
17             {
18                 
19                 string Title = dt.Rows[0]["BLB_FILENAME"].ToString();//"中文的名称.doc";//这里是欲显示在另存为里面的文件名字,必须有后缀名
20                 string fileName = Global.AttachPath + "" + dt.Rows[0]["BLB_URL"].ToString();//"d:\test.doc";//这里是实际存在的文件路径
21                 
22                 Response.Charset = "UTF-8";
23                 Response.ContentEncoding = System.Text.Encoding.UTF8;
24                 Response.Buffer = false;
25                 Response.Clear();
26                 Response.ContentType = "APPLICATION/OCTET-STREAM;charset=UTF-8";//dt.Rows[0]["BLB_MIMETYPE"].ToString();//"APPLICATION/OCTET-STREAM";
27                 Response.AddHeader("Content-Disposition", "attachment;filename=\"" + Server.UrlEncode(Title) +"\"");
28                 try
29                 {
30                     //Response.AddHeader("Content-Length", file.Length.ToString());
31                     Response.WriteFile(Server.MapPath(fileName));
32                     Response.Flush();
33                     Response.Clear();
34                     Response.End(); 
35                 }
36                 catch(Exception ex)
37                 {
38                     Response.ContentType = "text/html; charset=gb2312";
39                     Response.Write("<script>alert(‘下载文件错误:"+ex.Message+"’);</script>");
40                 }
41 
42             }
43             else
44             {
45                 Response.Write("没有找到该附件内容!");
46                 Response.End();
47             }
48         }
 
 
需要注意的地方:
1、中文文件名最好用Server.UrlEncode进行处理一下。这样会安全一些,有一些IE客户端有把IE选项里的高级“总是以UTF-8发送URL钩上,如果没有钩上,不加这句话可能会出现乱码的情况,如果有钩上可能会正常。
2、.net发布的时候最好把bin下的dll删除掉再把新的复制上去。这次客户更新时候就是用覆盖的方式,造成没有及时更新,让我找了好久都没有找到问题所在。

恢复mysql5 root密码 如何复位根用户密码

如果你从未为MySQL设置根用户密码,服务器在以根用户身份进行连接时不需要密码。但是,建议你为每个账户设置密码。请参见5.6.1节,“通用安全指南”。
如果你以前设置了根用户密码,但却忘记了该密码,可设置新的密码。下述步骤是针对Windows平台的。在本节后面的内容中,介绍了针对Unix平台的步骤。
在Windows平台下,该步骤是:
以系统管理员身份登录到系统。
如果MySQL服务器正在运行,停止它。对于作为Windows服务运行的服务器,进入服务管理器:
开始菜单->控制面板->管理工具->服务
然后在列表中找出MySQL服务器,并停止它。
如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。
创建1个文本文件,并将下述命令置于单一行中:
SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(‘MyNewPassword’);
用任意名称保存该文件。在本例中,该文件为C:\mysql-init.txt。
打开控制台窗口,进入DOS命令提示:
开始菜单->运行-> cmd
假定你已将MySQL安装到C:\mysql。如果你将MySQL安装到了另一位置,请对下述命令进行相应的调整。
在DOS命令提示符下,执行命令:
C:\> C:\mysql\bin\mysqld-nt –init-file=C:\mysql-init.txt
在服务器启动时,执行由“–init-file”选项命名的文件的内容,更改根用户密码。当服务器成功启动后,应删除C:\mysql-init.txt。
如果你使用MySQL安装向导安装了MySQL,或许需要指定“–defaults-file”选项:
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld-nt.exe
         –defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini"
         –init-file=C:\mysql-init.txt
使用服务管理器,可找到恰当的“–defaults-file”设置:
开始菜单->控制面板->管理工具->服务
在列表中找出MySQL服务,右击,并选择“属性”选项。在可执行字段的Path(路径)中包含“–defaults-file”设置。
停止MySQL服务器,然后在正常模式下重启它。如果以服务方式运行服务器,应从Windows服务窗口启动它。如果以手动方式启动了服务器,能够像正常情形下一样使用命令。
应能使用新密码进行连接。
在Unix环境下,重置根用户密码的步骤如下:
以Unix根用户身份、或以运行mysqld服务器的相同身份登录到系统。
找到包含服务器进程ID的.pid文件。该文件的准确位置和名称取决于你的分发版、主机名和配置。常见位置是/var/lib/mysql/、/var/run/mysqld/和/usr/local/mysql/data/。一般情况下,文件名的扩展名为.pid,并以mysqld或系统的主机名开始。
在下述命令中使用.pid文件的路径名,向mysqld进程发出正常的kill(而不是kill -9),可停止MySQL服务器:
shell> kill `cat /mysql-data-directory/host_name.pid`
注意,cat命令使用符号“`”而不是“’”:这会使cat的输出代入到kill命令中。
创建文本文件,并将下述命令放在文件内的1行上:
SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(‘MyNewPassword’);
用任意名称保存文件。对于本例,文件为~/mysql-init。
用特殊的“–init-file=~/mysql-init”选项重启MySQL服务器:
shell> mysqld_safe –init-file=~/mysql-init &
文件init-file的内容在服务器启动时执行,更改根用户密码。服务器成功启动后,应删除~/mysql-init。
应能使用新密码进行连接。
作为可选方式,在任何平台上,可使用mysql客户端设置新密码(但该方法不够安全):
停止mysqld,并用“–skip-grant-tables –user=root”选项重启它(Windows用户可省略–user=root部分)。
使用下述命令连接到mysqld服务器:
shell> mysql -u root
在mysql客户端发出下述语句:
mysql> UPDATE mysql.user SET Password=PASSWORD(‘newpwd’)
    ->                   WHERE User=’root’;
mysql> FLUSH PRIVILEGES;
用打算使用的实际根用户密码替换“newpwd”。
应能使用新密码进行连接。

asp.net获取网站路径

 
在ASP.NET编程中经常需要用Request获取url的有关信息.
测试的url地址是http://www.test.com/testweb/default.aspx, 结果如下:
Request.ApplicationPath:                     /testweb
Request.CurrentExecutionFilePath:       /testweb/default.aspx
Request.FilePath:                                /testweb/default.aspx
Request.Path:                                     /testweb/default.aspx
Request.PathInfo:
Request.PhysicalApplicationPath:          E:\WWW\testweb\
Request.PhysicalPath:                         E:\WWW\testweb\default.aspx
Request.RawUrl:                                 /testweb/default.aspx
Request.Url.AbsolutePath:                    /testweb/default.aspx
Request.Url.AbsoluteUri:                      http://www.test.com/testweb/default.aspx
Request.Url.Host:                                www.test.com
Request.Url.LocalPath:                        /testweb/default.aspx
当url中带参数时可以使用:
HttpContext.Current.Request.Url.PathAndQuery.ToString()//
本页地址:   Request.URL;  

上页地址:  
Request.UrlReferrer  
Request.ServerViables["http_referer"]  
Request.RawUrl  
Request.RawUrl.QueryAndPath  
System.IO.Path.GetFileName(Request.FilePath.ToString())