ASP.NET下文件下載時重命名

 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文件夾下。
到這裏,整個下載重命名就做好了。歡迎提取不同的意見。
 
發佈了95 篇原創文章 · 獲贊 40 · 訪問量 88萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章