ASP.NET下文件下载时重命名

来源:互联网 发布:苹果维修预约软件 编辑:程序博客网 时间:2024/06/05 11:13
 string FileUlr = Server.MapPath("~/images/test/");//获取文件所在目录
        FileUlr += "5.jpg";//获取现有文件所在位置
        string OutFileName ="NewFileName";
        if (File.Exists(FileUlr))//判断该文件是否存在
        {
            FileInfo fi = new FileInfo(FileUlr);
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = false;
 
            string tempfile = Path.GetFileName(FileUlr);//获取文件名称
            tempfile = OutFileName + tempfile.Substring(tempfile.LastIndexOf("."));
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = false;
            // 这一步调试时中文文件名也是正常。
 
            string DownloadFileName = null;
            string browser = this.Context.Request.UserAgent.ToUpper();
            if (browser.Contains("MS") == true && browser.Contains("IE") == true)//判断当前用户使用的浏览器类型
            {
                DownloadFileName = HttpUtility.UrlEncode(tempfile); // 这一步调试时中文文件名也是正常。在ie中中文显示正常,但在firefox中,中文依然为
                //乱码,所以这里要判断用户使用浏览器类型,来保持中文文件名的正常显示
            }
            else if (browser.Contains("FIREFOX") == true)
            {
                DownloadFileName = "\"" + tempfile + "\"";
            }
            else
            {
                DownloadFileName = HttpUtility.UrlEncode(tempfile);// 这一步弹出下载保存的对话框,出现文件名乱码,但变量中的文件名是正常的。
            }
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + DownloadFileName);//为用户保存文件是显示的名称
            Response.AppendHeader("Content-Length", fi.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(FileUlr);//用response来返回文件的路径
            Response.Flush();//清空response
            Response.End();
        }
        else
        {
            Response.Write("<script langauge=javascript>alert(‘文件不存在!’);</script>");
            Response.End();
        }

其实该方法的最核心东西就是在  Response.AppendHeader("Content-dispostion","attachment,filename="+DownloadFileName);
这块 ,Content-dispostion是mime协议的扩展,mime协议指示mime用户代理如何显示附加的文件。当Internet Explorer 接收到头时,他会激活文件下载对话框,他的文件明框自动填充了头中指定的文件名。这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户问询保存位置。当然这种情况在ie9中已不存在了,ie9会自动的保存在一开始设定好的文件夹下。ie9默认的文件保存位置为user/DownLoad文件夹下。
到这里,整个下载重命名就做好了。欢迎提取不同的意见。
 
摘自:http://www.liushuige.net/newweb/html/news/info.aspx?id=32
原创粉丝点击