蛋疼之余,写了一个小程序,用于在页面中管理当前 Web 站点下的所有文件。可以对所有文件和文件夹执行重命名、删除等功能,也可以创建目录,上传文件,下载文件等。
不废话,先看效果:
贴代码:
FileManager
1 <!-- 2 Author: 张浩华 3 DateTime: 2012-07-06 03:25 4 ------------------------------------------------- 5 管理Web站点下文件的页面程序。 6 提供上传、重命名、删除、创建文件夹、下载等功能。 7 ------------------------------------------------- 8 于 2012-07-06 16:35 修改。 9 修改“当前目录”保存方式,取消使用静态变量保存,使用 Session 对象记录当前目录。 10 添加“当前目录”页面显示,显示当前操作所在目录(根目录名为“Root\”)。 11 12 --> 13 <%@ Page Language="C#" %> 14 15 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 16 17 <script runat="server"> 18 string Msg = string.Empty; 19 20 private string _CURRENT_PATH 21 { 22 get { return Session["ManagerCurrentPath"] == null ? Server.MapPath("~/") : Session["ManagerCurrentPath"].ToString(); } 23 set { Session["ManagerCurrentPath"] = value; } 24 } 25 26 protected void Page_Load(object sender, EventArgs e) 27 { 28 InitFiles(); 29 switch (Request["action"]) 30 { 31 case "Root": 32 Root(); 33 break; 34 case "Back": 35 Back(); 36 break; 37 case "Open": 38 Open(Request["FileName"]); 39 break; 40 case "Delete": 41 Delete(Request["FileName"]); 42 break; 43 } 44 } 45 46 protected void btnUpload_Click(object sender, EventArgs e) 47 { 48 if (fuFile.HasFile) 49 { 50 string currentPath = _CURRENT_PATH; 51 string fileName = fuFile.FileName; 52 if (rbCover.Checked) 53 { 54 } 55 else if (rbRename.Checked) 56 { 57 while (System.IO.File.Exists(currentPath + fileName)) 58 { 59 fileName = "new_" + fileName; 60 } 61 } 62 fuFile.SaveAs(currentPath + fileName); 63 } 64 InitFiles(); 65 } 66 67 protected void btnSave_Click(object sender, EventArgs e) 68 { 69 string oleFileName = hfOldName.Value; 70 string newFileName = txtNewName.Text; 71 if (string.IsNullOrEmpty(newFileName)) 72 { 73 Msg = "The file name can't for empty !"; 74 return; 75 } 76 77 string currentPath = _CURRENT_PATH; 78 string oldPath = currentPath + oleFileName; 79 string newPath = currentPath + newFileName; 80 if (IsFile(oldPath)) 81 { 82 if (System.IO.File.Exists(newPath)) 83 { 84 Msg = "The file name repeated, please reset."; 85 return; 86 } 87 System.IO.File.Move(oldPath, newPath); 88 } 89 else 90 { 91 if (string.IsNullOrEmpty(oleFileName)) 92 { 93 System.IO.Directory.CreateDirectory(newPath); 94 } 95 else 96 { 97 System.IO.Directory.Move(oldPath, newPath); 98 } 99 } 100 InitFiles(); 101 } 102 103 private void Back() 104 { 105 string path = _CURRENT_PATH; 106 string parent = new System.IO.DirectoryInfo(path).Parent.FullName + "\\"; 107 if (parent.IndexOf(Server.MapPath("~/")) >= 0) 108 { 109 _CURRENT_PATH = parent; 110 } 111 Response.Redirect(Request.Url.AbsolutePath); 112 } 113 114 private void Delete(string filename) 115 { 116 if (string.IsNullOrEmpty(filename)) return; 117 string currentPath = _CURRENT_PATH; 118 string path = currentPath + filename; 119 if (IsFile(path)) 120 { 121 System.IO.File.Delete(path); 122 } 123 else 124 { 125 try { System.IO.Directory.Delete(path, false); } 126 catch { } 127 } 128 Response.Redirect(Request.Url.AbsolutePath); 129 } 130 131 protected string GetCreateTime(string name) 132 { 133 string currentPath = _CURRENT_PATH; 134 string path = currentPath + name; 135 return System.IO.File.GetCreationTime(path).ToString("yyyy-MM-dd HH:mm:ss"); 136 } 137 138 protected string GetIcon(string name) 139 { 140 string currentPath = _CURRENT_PATH; 141 string path = currentPath + name; 142 if (IsFile(path)) 143 { 144 int dotPlace = name.LastIndexOf('.'); 145 if (dotPlace < 0) 146 { 147 return ""; 148 } 149 else 150 { 151 return name.Substring(dotPlace + 1); 152 } 153 } 154 else 155 { 156 return "{DIR}"; 157 } 158 } 159 160 protected string GetSize(string name) 161 { 162 string currentPath = _CURRENT_PATH; 163 string path = currentPath + name; 164 if (IsFile(path)) 165 { 166 long length = new System.IO.FileInfo(path).Length; 167 return ((length / 1024) + 1) + " KB (" + length + "B)"; 168 } 169 else 170 { 171 return "unknow"; 172 } 173 } 174 175 protected string GetUpdateTime(string name) 176 { 177 string currentPath = _CURRENT_PATH; 178 string path = currentPath + name; 179 return System.IO.File.GetLastWriteTime(path).ToString("yyyy-MM-dd HH:mm:ss"); 180 } 181 182 private void InitFiles() 183 { 184 string currentPath = _CURRENT_PATH; 185 string[] directorys = System.IO.Directory.GetDirectories(currentPath); 186 string[] files = System.IO.Directory.GetFiles(currentPath); 187 System.Collections.Generic.IList<string> arr = new System.Collections.Generic.List<string>(); 188 foreach (string s in directorys) 189 { 190 arr.Add(s.Replace(currentPath, "")); 191 } 192 foreach (string s in files) 193 { 194 arr.Add(s.Replace(currentPath, "")); 195 } 196 197 rptFile.DataSource = arr; 198 rptFile.DataBind(); 199 } 200 201 private bool IsFile(string path) 202 { 203 return System.IO.File.Exists(path); 204 } 205 206 private void Open(string fileName) 207 { 208 string currentpath = _CURRENT_PATH; 209 string path = currentpath + fileName; 210 211 if (IsFile(path)) 212 { 213 System.IO.FileInfo fileInfo = new System.IO.FileInfo(path); 214 Response.Clear(); 215 Response.ClearContent(); 216 Response.ClearHeaders(); 217 Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); 218 Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 219 Response.AddHeader("Content-Transfer-Encoding", "binary"); 220 Response.ContentType = "application/octet-stream"; 221 Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 222 Response.WriteFile(fileInfo.FullName); 223 Response.Flush(); 224 Response.End(); 225 226 } 227 else 228 { 229 _CURRENT_PATH = path + "\\"; 230 Response.Redirect(Request.Url.AbsolutePath); 231 } 232 } 233 234 private void Root() 235 { 236 _CURRENT_PATH = Server.MapPath("~/"); 237 Response.Redirect(Request.Url.AbsolutePath); 238 } 239 240 </script> 241 242 <html xmlns="http://www.w3.org/1999/xhtml"> 243 <head runat="server"> 244 <title></title> 245 <style type="text/css"> 246 body{ margin:0; padding:10px; background:#aaf; font-family:Arial 宋体; font-size:14px; } 247 248 #container{ border:1px #ddd solid;} 249 #menu{ background-color:#ccc; } 250 #menu .line{ border-left:solid 1px #fff; width:0; } 251 #menu a{ display:inline-block; margin:0; padding:8px 12px; text-decoration:none; } 252 #menu a:active,#menu a:hover{ background-color:#ddd; } 253 254 #main{ height:350px; } 255 #main .file{ float:left; width:100px; height:75px; margin:8px; padding:5px; overflow:hidden; text-align:center; } 256 #main .file .icon{ margin:0 5px; font-family:Impact,Arial Black; font-size:30px; width:85px; height:40px; overflow:hidden; } 257 #main .file .name{ font-size:12px; } 258 259 #main, #upload_panel, #rename_panel{ background-color:#fff; border:1px #ddd solid; border-left:0; border-right:0; } 260 #upload_panel, #rename_panel{ padding:10px; } 261 262 #status_bar{ background-color:#ccc; } 263 #status_bar span{ display:inline-block; margin:0; padding:5px 30px 5px 8px; border-left:solid 1px #ddd; } 264 </style> 265 <script type="text/javascript"> 266 var Page = { CurrentFile: null }; 267 268 /* 页面加载 */ 269 function PageLoad() { 270 InitMenu(); 271 InitFile(); 272 InitStatusBar(); 273 InitPanel(); 274 ShowMessage(); 275 } 276 277 /* 初始化菜单 */ 278 function InitMenu() { 279 /* 页面加载事件,处理初始化页面操作 */ 280 var menuItems = document.getElementById("menu").childNodes; 281 for (var menu in menuItems) { 282 if (menu >= 0 && (menuItems[menu].tagName + "").toUpperCase() == "A") { 283 var a = menuItems[menu]; 284 a.onclick = ClickMenuItem; 285 } 286 } 287 } 288 289 /* 初始化文件列表事件 */ 290 function InitFile() { 291 var files = document.getElementById("main").childNodes; 292 for (var k in files) { 293 if (k >= 0 && (files[k].className + "").toLowerCase().indexOf("file") >= 0) { 294 var file = files[k]; 295 file.style.cursor = "pointer"; 296 file.onclick = ClickFile; 297 } 298 } 299 } 300 301 /* 初始化“上传文件”和“修改文件名”模块 */ 302 function InitPanel() { 303 document.getElementById("upload_panel").style.display = "none"; //隐藏上传文件模块 304 document.getElementById("rename_panel").style.display = "none"; //隐藏修改文件名模块 305 document.getElementById("fuFile").value = ""; //清空上传文件控件 306 document.getElementById("txtNewName").value = ""; //清空名称文本框 307 document.getElementById("hfOldName").value = ""; //清空名称文本框 308 document.getElementsByName("btnCancel")[0].onclick = InitPanel; //绑定 Cancel 按钮 Click 事件 309 document.getElementsByName("btnCancel")[1].onclick = InitPanel; //绑定 Cancel 按钮 Click 事件 310 } 311 312 /* 初始化状态栏 */ 313 function InitStatusBar() { 314 var statusItems = document.getElementById("status_bar").childNodes; 315 for (var itemKey in statusItems) { 316 if (itemKey >= 0 && (statusItems[itemKey].tagName + "").toUpperCase() == "SPAN") { 317 var span = statusItems[itemKey]; 318 var value = Page.CurrentFile == null ? "" : Page.CurrentFile.getAttribute(span.className); 319 if ("filename" == span.className.toLowerCase()) span.innerHTML = "FileName: " + value; 320 if ("type" == span.className.toLowerCase()) span.innerHTML = "Type: " + value; 321 if ("size" == span.className.toLowerCase()) span.innerHTML = "Size: " + value; 322 if ("create_time" == span.className.toLowerCase()) span.innerHTML = "CreateTime: " + value; 323 if ("update_time" == span.className.toLowerCase()) span.innerHTML = "LastUpdateTime: " + value; 324 } 325 } 326 } 327 328 /* 单击菜单项事件 */ 329 function ClickMenuItem() { 330 InitPanel(); 331 var id = this.id; 332 333 switch (id) { 334 case "Root": 335 location.search = 'action=Root'; 336 break; 337 case "Back": 338 location.search = 'action=Back'; 339 break; 340 case "Open": 341 Open(); 342 break; 343 case "NewFolder": 344 document.getElementById("rename_panel").style.display = ""; 345 break; 346 case "Upload": 347 document.getElementById("upload_panel").style.display = ""; 348 break; 349 case "Rename": 350 Rename(); 351 break; 352 case "Delete": 353 Delete() 354 break; 355 } 356 357 return false; //不响应超链接跳转操作 358 } 359 360 /* 单击文件事件 */ 361 function ClickFile() { 362 if (Page.CurrentFile != null) { 363 Page.CurrentFile.style.background = ""; 364 } 365 366 if (Page.CurrentFile == this) { 367 Page.CurrentFile.style.background = ""; 368 Page.CurrentFile = null; 369 } else { 370 this.style.background = "#ddd"; 371 Page.CurrentFile = this; 372 } 373 InitStatusBar(); 374 InitPanel(); 375 } 376 377 function Delete() { 378 if (Page.CurrentFile != null) { 379 location.search = 'action=Delete&FileName=' + Page.CurrentFile.getAttribute("filename"); 380 } 381 } 382 383 function Open() { 384 if (Page.CurrentFile != null) { 385 location.search = 'action=Open&FileName=' + Page.CurrentFile.getAttribute("filename"); 386 } 387 } 388 389 function Rename() { 390 if (Page.CurrentFile != null) { 391 document.getElementById("txtNewName").value = Page.CurrentFile.getAttribute("filename"); 392 document.getElementById("hfOldName").value = Page.CurrentFile.getAttribute("filename"); 393 document.getElementById("rename_panel").style.display = ""; 394 } 395 } 396 397 function ShowMessage() { 398 var msg = "<%=Msg %>"; 399 if (msg != "") { 400 alert(msg); 401 } 402 } 403 </script> 404 </head> 405 <body onload="PageLoad()"> 406 <form id="form1" runat="server"> 407 <div id="container"> 408 <div id="menu"> 409 <a href="#" id="Root">Root</a> 410 <a href="#" id="Back">Back</a> 411 <a href="#" id="Open">Open(Download)</a> 412 <a class="line"></a> 413 <a href="#" id="NewFolder">NewFolder</a> 414 <a href="#" id="Upload">Upload</a> 415 <a href="#" id="Rename">Rename</a> 416 <a href="#" id="Delete">Delete</a> 417 <a class="line"></a> 418 <a><%=_CURRENT_PATH.Replace(Server.MapPath("~/"), "Root\\") %></a> 419 </div> 420 <div id="main"> 421 <asp:Repeater ID="rptFile" runat="server"> 422 <ItemTemplate> 423 <div class="file" 424 filename="<%# Container.DataItem %>" 425 size="<%# GetSize(Container.DataItem + "") %>" 426 type="<%# GetIcon(Container.DataItem + "") %>" 427 create_time="<%# GetCreateTime(Container.DataItem + "") %>" 428 update_time="<%# GetCreateTime(Container.DataItem + "") %>"> 429 <div class="icon"><%# GetIcon(Container.DataItem + "") %></div> 430 <div class="name"><%# Container.DataItem %></div> 431 </div> 432 </ItemTemplate> 433 </asp:Repeater> 434 <div style="clear:both;"></div> 435 </div> 436 <div id="upload_panel"> 437 <asp:FileUpload ID="fuFile" runat="server" /> 438 <asp:RadioButton ID="rbCover" runat="server" GroupName="FileReapter" Text="Cover" Checked="true" /> 439 <asp:RadioButton ID="rbRename" runat="server" GroupName="FileReapter" Text="Rename" /> 440 <asp:Button ID="btnUpload" runat="server" Text="Upload" onclick="btnUpload_Click" /> 441 <input name="btnCancel" type="button" value="Cancel" /> 442 </div> 443 <div id="rename_panel"> 444 <asp:TextBox ID="txtNewName" runat="server" Text="asdf"></asp:TextBox> 445 <asp:Button ID="btnSave" runat="server" Text="Save" onclick="btnSave_Click" /> 446 <input name="btnCancel" type="button" value="Cancel" /> 447 <asp:HiddenField ID="hfOldName" runat="server" /> 448 </div> 449 <div id="status_bar"> 450 <span class="filename"></span> 451 <span class="type"></span> 452 <span class="size"></span> 453 <span class="create_time"></span> 454 <span class="update_time"></span> 455 </div> 456 </div> 457 </form> 458 </body> 459 </html>
不想 Copy 的话,下面附页面下载地址:
修改版:https://files.cnblogs.com/zhhh/FileManager(%E4%BF%AE%E6%94%B9).zip