這個導出網站功能指通過前臺javascript觸發進入ashx函數中,實現將服務器中某個文件夾(包含其子文件夾和文件)通通復制到服務器中另一處位置,當然該文件夾本身就是一個網站。所以導出網站最重要的兩個功能,除了javascript的觸發,就是C#ashx文件復制文件夾的操作。
下面這段代碼就是通過javascript的Request函數調用copy.ashx函數文件,實現將需要復制的文件夾的子路徑和復制到所在位置的子路徑的兩個參數傳進去后臺函數getWebList函數就是后臺的一個函數,這個函數可以不用管他。getBack函數就需要寫上,可以通過這個函數獲取結果。當然Webside_load這個函數也是需要onclick觸發過來的,這里就不全部列出來了。
以下是C#實現導出網站功能引用片段:
//Webside_load導出網站 function Webside_load(sID, iWebTemplateID) {//alert(0); //alert(sID); alert(iWebTemplateID); //被賦值的目錄:就是模板ID下的文件夾以及文件 sTartDir = "http://www.cnblogs.com/uploadfile/webTemplate/" + iWebTemplateID; //目標目錄:就是作品ID下 sEndDir = "http://www.cnblogs.com/uploadfile/showweb/" + sID + "/"; //alert(sourceDir); alert(targetDir); var variable = ["sTartDir", "sEndDir"]; var value = [sTartDir, sEndDir]; //alert(value); Request("getWebList", variable, value, getBack, WebUrl + "http://www.cnblogs.com/copy.ashx", svrNamespace); } function getBack() { var xmlhttp = xmlHttpRequest; var Result = xmlhttp.responseText; alert(Result); }
通過上面的javascript,可以獲取來自后臺函數的數據,而獲取后臺函數的數據就需要下面關于遍歷加copy的函數文件了。
以下是引用片段:
<%@ WebHandler Language="C#" Class="copy" %> using System; using System.Web; using System.IO; public class copy : IHttpHandler { //采用遞歸的方式遍歷,文件夾和子文件中的所有文件。 public void ProcessRequest(HttpContext context) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; HttpServerUtility Server = context.Server; //指定輸出頭和編碼 context.Response.ContentType = "text/html"; Response.Charset = "utf-8"; HttpFileCollection fs = HttpContext.Current.Request.Files; string sTartDir = Request.Form["sTartDir"]; string sEndDir = Request.Form["sEndDir"]; sTartDir = System.Web.HttpContext.Current.Server.MapPath(sTartDir); sEndDir = System.Web.HttpContext.Current.Server.MapPath(sEndDir); //Test //string sTartDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/webTemplate/2"); //string sEndDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/showweb/2012082700000001/"); MyDirectory_Copy(sTartDir, sEndDir); Response.Write("成功導出!"); } static void MyDirectory_Copy(string sTartDir, string sEndDir) { //判斷兩個目錄是否都是存在的 if (!Directory.Exists(sTartDir)) return; if (!Directory.Exists(sEndDir)) return; //獲取文件夾名字 string sTarteFolderName = sTartDir.Replace(Directory.GetParent(sTartDir).ToString(), "").Replace(Path.DirectorySeparatorChar.ToString(), ""); //判斷是否該文件夾賦值成功 if (sTartDir == sEndDir + sTarteFolderName) return; //要復制到的路徑 string endPath = sEndDir + Path.DirectorySeparatorChar.ToString() + sTarteFolderName; if (Directory.Exists(endPath)) { Directory.Delete(endPath, true); } Directory.CreateDirectory(endPath); //復制文件 string[] files = Directory.GetFiles(sTartDir); for (int i = 0; i < files.Length; i++) { File.Copy(files[i], endPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files[i])); } //復制目錄 string[] dires = Directory.GetDirectories(sTartDir); for (int j = 0; j < dires.Length; j++) { MyDirectory_Copy(dires[j], endPath); } } public bool IsReusable { get { return false; } } }
從前臺獲得sTartDir源文件目錄和 sTartDir目標目錄,得到他們的絕對路徑。再執行DirectoryCopy函數,獲得源文件的文件夾名字,將目標文件的絕對路徑加上文件夾名賦給新的目標文件目錄通過遞歸循環判斷,執行復制過程。
這種方法類似于之前所提到的C#遍歷文件夾,不過這里是內部遍歷復制,和在系統中遍歷也不是完全一樣。
以上就是C#導出網站功能的全部內容介紹,希望對大家的學習有所幫助。
新聞熱點
疑難解答