You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text;
#region histroy
///程式代號:OpenFile
///程式名稱:檔案下載
///程式說明:
///xx.YYYY/MM/DD VER AUTHOR COMMENTS(說明修改的內容)
///01.2012/05/10 1.0 Ethan CREATE
#endregion
namespace OT.Web { public partial class OpenFile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 在這裡放置使用者程式碼以初始化網頁
Response.Expires = 0; FnOpenFile(); }
private void FnOpenFile() { try { //防止在IE中直接開啟本程式操作檔案
if (Request["U"] == null && Session["U"] == null) { WriteMsg("非法登入,不可操作檔案!"); } //重定向後開啟檔案
else if (Session["U"] != null) { string strFileName = Session["U"].ToString(); Session.Remove("U");//及時釋放Session
this.ReadFile(strFileName); } //遠端呼叫本程式時帶入參數檔案名稱U,為防止User看到U的內容,進行一次重定向
else if (Request["U"] != null) { string strFileName = Request.QueryString["U"].ToString(); strFileName = FnHidToFileName(strFileName).Replace("\\", "/"); //Session["U"] = strFileName;//用Session記錄U做重定向動作
//Session["FileName"] = Request.QueryString["FileName"].ToString();
//Response.Redirect(@"OpenFile.aspx", false);
this.ReadFile(strFileName); } } catch (Exception ex) { Session.Remove("U");//及時釋放Session
this.WriteMsg("開啟檔案出錯,請重新試一次!"); } }
/// <summary>
/// 將用於URL中傳參的Base64碼轉為String,轉換前將Base64碼中用*和@替換的+和/還原
/// </summary>
/// <param name="strFrom"></param>
/// <returns></returns>
public string FnHidToFileName(string strFrom) { string strTo = strFrom.Replace("*", "+").Replace("@", "/").Replace("!", "="); strTo = FnBase64ToString(strTo); return strTo; } /// <summary>
/// 將Base64碼轉為String
/// </summary>
/// <param name="strFrom"></param>
/// <returns></returns>
public string FnBase64ToString(string strFrom) { byte[] byTo = Convert.FromBase64String(strFrom); string strTo = System.Text.Encoding.Default.GetString(byTo); return strTo; } /// <summary>
/// 開啟檔案
/// </summary>
/// <param name="strFileName"></param>
private void ReadFile(string strFileName) { string strDownFileName = UTF_FileName(Request.QueryString["FileName"].ToString()); strDownFileName = HttpUtility.UrlEncode(strDownFileName, System.Text.Encoding.UTF8); //解決中文問題
Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition" , String.Format("attachment; filename=\"{0}\";", strDownFileName)); //Response.Write("**" + fileName);
Response.WriteFile(UTF_FileName(strFileName)); try { Response.End(); //如果提前結束會出現異常。
} catch (Exception ex) { return; } }
private static string UTF_FileName(string filename) { return HttpUtility.UrlDecode(filename); //return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
} /// <summary>
/// Alert訊息並關閉畫面
/// </summary>
/// <param name="Msg">alert出來的訊息內容</param>
private void WriteMsg(string Msg) { StringBuilder sbScript = new StringBuilder(); sbScript.Append("<script language='javascript'>"); sbScript.Append("ShowArtAlert('" + Msg + "');"); sbScript.Append("window.opener=null;window.open('','_self');window.close();"); sbScript.Append("</script>"); this.ClientScript.RegisterStartupScript(GetType(), "close", sbScript.ToString()); }
} }
|