联系:手机/微信(+86 17813235971) QQ(107644445)
标题:通过web更新网站(1)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
现在维护的网站比较多,经常因为要修改一个小小的东西,要远程登录,或者ftp登录上去下载下来,然后在修改后,再上传上去,总之比较麻烦,我现在总体设想是通过web实现手工的更新网站,既实现通过web下载、上传、删除、编辑。
今天是实现了对整个站点的文件显示,下载和上传到对应目录,为该程序的第一部分
aspx代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function select_dir() { var select = document.getElementById("selectType"); document.getElementById("h_dir").value = select.options[select.selectedIndex].value; ; } </script> </head> <body> <form id="form1" runat="server"> <input id="h_dir" type="hidden" runat="server"/> <asp:Label ID="lbl_dir" runat="server" ></asp:Label> <asp:Button ID="btn_select" runat="server" Text="查看文件" onclick="btn_select_Click" /> <div style="width:400px; height:500px; overflow:auto"> <asp:Label ID="show_file" runat="server" ></asp:Label> </div> <asp:FileUpload ID="file_up" runat="server" /> <asp:Button ID="btn_up" runat="server" Text="上传文件" onclick="btn_up_Click" /> </form> </body> </html>
cs代码
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Data; using System.Threading; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string web_file=Server.MapPath("."); DirectoryInfo thisOne = new DirectoryInfo(web_file); lbl_dir.Text="<select id='selectType' onclick='select_dir();' ><option value='" + System.Web.HttpContext.Current.Server.UrlEncode(web_file) + "'>网站目录</option>" + ListSelectShow(thisOne, 0, "") + "</select>"; h_dir.Value = System.Web.HttpContext.Current.Server.UrlEncode(web_file); if (Request.QueryString["F"]!=null) { string d_file = System.Web.HttpContext.Current.Server.UrlDecode(Request.QueryString["F"].ToString()); //求文件名 string[] fs = d_file.Split('\\'); string ext = fs[fs.Length - 1]; //下载文件 Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, ext, d_file, 1024000); if (!success) Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('下载文件失败,请重试');", true); Page.Response.End(); } } } public string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录和 文件,树形结构显示 { if (nLevel == 0) { FileInfo[] fileInfo = theDir.GetFiles(); foreach (FileInfo fInfo in fileInfo) { Rn += "├"; Rn += "<a href='Default.aspx?F="; Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName); Rn += "'>"; Rn += fInfo.Name.ToString() + "</a> <br />"; } } DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录 foreach (DirectoryInfo dirinfo in subDirectories) { if (nLevel == 0) { Rn += "├"; } else { string _s = ""; for (int i = 1; i <= nLevel; i++) { _s += "│ "; } Rn += _s + "├"; } Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />"; FileInfo[] fileInfo = dirinfo.GetFiles(); //目录下的文件 foreach (FileInfo fInfo in fileInfo) { if (nLevel == 0) { Rn += "│ ├"; } else { string _f = ""; for (int i = 1; i <= nLevel; i++) { _f += "│ "; } Rn += _f + "│ ├"; } Rn += "<a href='Default.aspx?F="; Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName); Rn += "'>"; Rn += fInfo.Name.ToString() + "</a><br />"; } Rn = ListTreeShow(dirinfo, nLevel + 1, Rn); } return Rn; } public static string ListSelectShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录下拉框显示 { DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录 foreach (DirectoryInfo dirinfo in subDirectories) { Rn += "<option value=\"" +System.Web.HttpContext.Current.Server.UrlEncode( dirinfo.FullName) + "\" >"; if (nLevel == 0) { Rn += "├"; } else { string _s = ""; for (int i = 1; i <= nLevel; i++) { _s += "│ "; } Rn += _s + "├"; } Rn += "" + dirinfo.Name.ToString() + "</option>"; Rn = ListSelectShow(dirinfo, nLevel + 1, Rn); } return Rn; } protected void btn_select_Click(object sender, EventArgs e) { string first_dir = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value); DirectoryInfo thisOne = new DirectoryInfo(first_dir); show_file.Text = ListTreeShow(thisOne, 0, ""); } public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)//下载文件 { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; double pack = 10240; //10K bytes //int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); if (startBytes != 0) { //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString()))); Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; } protected void btn_up_Click(object sender, EventArgs e) { if (file_up.HasFile) { try { string path = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value); string file = file_up.FileName; file_up.SaveAs(path + "/" + file); DirectoryInfo thisOne = new DirectoryInfo(path); show_file.Text = ListTreeShow(thisOne, 0, ""); } catch { Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('上传文件失败,请重试');", true); } } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('请选择文件');", true); } } }