附件下载直接显示另存为对话框并保存原有中文文件名的解决办法
2009-02-17 16:54
579 查看
原理其实很简单,就是修改一下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删除掉再把新的复制上去。这次客户更新时候就是用覆盖的方式,造成没有及时更新,让我找了好久都没有找到问题所在。
因为我原来设计的时候就把附件的处理做成一个用户组件,所以修改起来也很简单,只要增加一个下载的界面及修改用户组件的内容即可。
具体步骤:
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删除掉再把新的复制上去。这次客户更新时候就是用覆盖的方式,造成没有及时更新,让我找了好久都没有找到问题所在。
相关文章推荐
- 附件下载直接显示另存为对话框并保存原有中文文件名的解决办法
- 解决Android4.3版本下,手机短彩接收中文文件名附件,中文名字的附件无法保存(第一步:解决从网络下载附件后,持久化时中文文件名中文乱码)
- 中文附件文件名过长,导致下载时文件名为乱码的错误解决办法
- 下载显示中文文件名 乱码 Firefox 的解决办法
- 文件下载 response.setHeader()下载中文文件名乱码问题 解决办法
- wordpress 上传附件中文文件名乱码解决办法(for Windows)
- QTP中点击下载链接不弹出另存为对话框的解决办法
- Cygwin的中文文件名显示和中文输入问题的解决办法
- 附件下载,中文文件名乱码如何解决???
- [转载]Ubuntu14.04系统中下载的中文文件名乱码解决办法
- ubuntu中文文件名在xp下显示为乱码的解决办法
- Struts2文件下载文件名中文出现乱码解决办法
- XFTP连接主机文件名显示中文乱码且不能下载的解决方法
- QTP中点击下载链接不弹出另存为对话框的解决办法
- 解决Tomcat 不能下载带中文文件名的附件的方法
- 【JavaMail开发】使javamail-1.4.2 发送邮件时中文附件乱码或显示"??"的解决办法
- 【ueditor】上传文件中文文件名失败和在线附件看不到的解决办法
- jsp 下载解决中文文件名显示问题
- Jira饼图上中文乱码,显示为“口”的解决办法,以及问题附件中文名时无法打开终极办法
- asp.net下载保存对话框中文乱码问题解决