联系:手机/微信(+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);
}
}
}
