asp.net 实现了一个文件下载的功能 如何解决中文文件名乱码的问题 在线等待高手指教

问题描述

我用asp.net实现了一个文件下载的功能,当被下载文件的文件名为字母时,被下载到本地后文件名正常,但是当被下载文件的文件名是中文名时,下载到本地后,文件名发生了乱码,恳请大侠指教?我的下载实现代码如下:protectedvoidbtnDownLoad_Click(objectsender,EventArgse){try{stringpath="/Files";stringmapPath=Server.MapPath(Request.ApplicationPath+path);//生成服务器上要下载的文件所在文件夹的路径stringfileName="testFile.doc";//names;//要下载的文件的文件名//文件路径(如果你确定文件在服务器上的路径例如C:webdownloadfile1.txt,可以直接写stringfilePath="C:\web\download\file1.txt".但是不推荐)stringfilePath=System.IO.Path.Combine(mapPath,fileName);FileInfoinfo=newFileInfo(filePath);//打开文件流longfileSize=info.Length;//指定文件大小//下载操作Response.Clear();Response.ContentType="application/octet-stream";Response.AddHeader("Content-Disposition","attachement;filename="+fileName);Response.AddHeader("Content-Length",fileSize.ToString());Response.WriteFile(filePath,0,fileSize);Response.Flush();Response.Close();}catch(Exceptionex){Response.Write("<scriptlanguage=javascript>alert("下载错误:"+ex.Message+"!");</script>");}

解决方案

解决方案二:

usingSystem;usingSystem.Collections;usingSystem.Data;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Services;usingSystem.Web.Services.Protocols;usingSystem.Xml.Linq;namespaceAsiastar.NR.Ajax{///<summary>///$codebehindclassname$的摘要说明///</summary>[WebService(Namespace="http://tempuri.org/")][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]publicclassHandler1:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";stringid=context.Request["id"].ToString();//获取资源的编号System.IO.StreamiStream=null;byte[]buffer=newByte[10000];intlength;longdataToRead;NRBLL.Filebf=newAsiastar.NRBLL.File();Guidguid=newGuid(id);if(bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"]!=null)//判断数据库路径是否存在{stringfilepath=bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString();//获取资源完整路径D:资源文件600cc139-14cf-448e-9e50-daa972d35e01.jpgstringOidfilename=bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FileNam"].ToString();//旧文件名称//stringfilename=System.IO.Path.GetFileName(filepath);//获取文件名称+后缀名600cc139-14cf-448e-9e50-daa972d35e01.JPG//intindex=filepath.IndexOf(".");//stringfiletype=filepath.Substring(index).ToLower();//后缀名//stringnewfilename=Oidfilename;//stringfilepath1=bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString().Substring(0,filepath.Length-8);try{stringfileName=HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(Oidfilename));//解码(注意这里2层解码)Oidfilename=Oidfilename.Replace("+","%20");//将“+”替换成“空格”iStream=newSystem.IO.FileStream(filepath,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.Read);dataToRead=iStream.Length;context.Response.ContentType="application/octet-stream";context.Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(Oidfilename,System.Text.Encoding.UTF8));//下载的时候下载原来的文件名称while(dataToRead>0){if(context.Response.IsClientConnected){length=iStream.Read(buffer,0,10000);context.Response.OutputStream.Write(buffer,0,length);context.Response.Flush();buffer=newByte[10000];dataToRead=dataToRead-length;}else{dataToRead=-1;}}}catch(Exceptionex){NR.Error.Log.LogType(ex.ToString());}finally{if(iStream!=null){iStream.Close();}}}else{NR.Error.Log.LogType("找不到文件!");}}publicboolIsReusable{get{returnfalse;}}}}

编码格式没有指定然后参考我上面的下载

时间: 2024-09-14 21:54:04

asp.net 实现了一个文件下载的功能 如何解决中文文件名乱码的问题 在线等待高手指教的相关文章

通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)   详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(si

ASP.NET实现下载功能的中文文件名乱码处理

早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件, 于是添加下列代码: ... Response.ContentType = mime; //相应的MIME TYPE Response.AppendHeader("Content-Disposition", "attachment; filename=\"" +fileName + "\""); Response.BinaryWrite(by

ASP.NET 自定义分页控件的问题,在线等待高手解答

问题描述 我做了一个自定义的分页控件,page.ascx,调用他的页面为productList.aspx,其中用一个隐藏的控件存储当前页码,分页控件中采用Linkbutton作为翻页的按钮,也就是说采用postBack机制做分页处理,做成形如"上一页123456下一页",这种样式,其中"123456"是动态生成的LINKBUTTON,现在的问题是,我点击翻页之后,将productList.aspx文件中d的隐藏控件值更新,更新完毕之后,我需要调用页面文件中重新绑定数

问一个关于Devexpress Gridcontrol控件滚动条的问题?(在线等待。。。)

问题描述 如何设置滚动条在最低部呢,当表格里的数据实时刷新,要求滚动条在最下面.实时的观看数据.不知道怎么设置?请Dx高手指点. 解决方案 解决方案二:你可以把它放在一个panel上..用panel设置滚动条.解决方案三:gridView1.FocusedRowHandle=dataTable.Rows.Count-1;解决方案四:gridView1.OptionsView.ColumnAutoWidth=false;解决方案五:该回复于2011-06-25 00:46:54被版主删除解决方案六

~~~~C#今天最棘手的一个问题!! 在线等待高手解决

问题描述 protectedvoidPage_Load(objectsender,System.EventArgse){//在此处放置用户代码以初始化页面returnBackButton.Visible=false;if(Request["message"]!=null){Label1.Text=Request["message"].ToString();}stringstrURL=Request["refurl"];if(strURL!=nul

ASP.NET直接下载一个文件

asp.net|下载 有的时候我们不想让用户直接在IE中打开已知类型的文件,比如Word,而希望能直接下载,这时候可用下面代码来替换Response.Redirect Response.ContentType = "application/octet-stream";Response.AddHeader("Content-Disposition", "attachment;FileName="+HttpUtility.UrlEncode(your

我安装了IIS,并配置好了,但还是运行不了ASP页面,它会报一个文件下载安全警报的对话框,这是怎么回事?请帮忙解决一下,谢谢

问题描述 我安装了IIS,并配置好了,但还是运行不了ASP页面,它会报一个文件下载安全警报的对话框,这是怎么回事?请帮忙解决一下,谢谢 解决方案 解决方案二:iis配置的问题解决方案三:ASP??估计你的IIS没有装好吧.解决方案四:如果没有猜错---你没有安装.netframework~~~~而且没有使用nerframework里面的aspnet_regiis程序来注册IIS.解决:安装netframework2.0打开运行输入cmd然后在dos界面下面输入cd(自己的安装系统盘):WINDO

asp.net mvc 实现导出excel表格功能怎么做?谢谢

问题描述 asp.net mvc 实现导出excel表格功能怎么做?谢谢 我在做asp.net mvc项目时,想将查询出来的数据 导出到excel表格,请问如何实现,请求具体的代码,谢谢 解决方案 参考在MVC中实现和网站不同服务器的批量文件下载以及NOPI下载数据到Excel的简单学习 (注:NOPI应为NPOI,一个开源的项目)

聊天-ASP.net MVC的一个项目里可以使用Node.js做的应用吗?

问题描述 ASP.net MVC的一个项目里可以使用Node.js做的应用吗? 20C 是这样的,最近我们小组在做一个ASP.net MVC 的项目网页,里面有个即时网络聊天室的功能要实现,我看到用Node.js做好像很不错,但是就是不知道.net的项目可以使用吗?