作了几个小项目,经常有"下载天地"这个栏目。因为文件一般是从远程通过ftp传到服务器上的,在后台的管理上,当需要添加一个下载条目时,以前的办法是,需要手工添加下载路径和文件大小,特别麻烦。后来看到ftb1.6.5上传图片的例子后,觉得这种方法完全可以用到后台选择文件的场合。于是,用了一天的功夫,实现了这个功能。(小弟愚笨,花了1天时间,大家不要笑啊
)
filelist.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
![](/Images/OutliningIndicators/None.gif)
namespace hwtkd.manage
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// filelist 的摘要说明。
/// </summary>
public class filelist : System.Web.UI.Page
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
protected System.Web.UI.WebControls.Panel Filepanel;
private void Page_Load(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(!Page.IsPostBack)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
rootpath = Request.QueryString["root"];
currentfolder = "";
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
rootpath = Request.Form["RootFolder"].ToString().Replace("\\", "\");
currentfolder = Request.Form["CurrentFolder"].ToString().Replace("\\", "\");
}
![](/Images/OutliningIndicators/InBlock.gif)
RootFolder.Value = rootpath;
CurrentFolder.Value = currentfolder;
path = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + rootpath + currentfolder;
![](/Images/OutliningIndicators/InBlock.gif)
DisplayList();
}
![](/Images/OutliningIndicators/InBlock.gif)
protected System.Web.UI.HtmlControls.HtmlInputHidden SelectedFile;
protected System.Web.UI.HtmlControls.HtmlInputHidden RootFolder;
protected System.Web.UI.HtmlControls.HtmlInputHidden CurrentFolder;
![](/Images/OutliningIndicators/InBlock.gif)
string rootpath;
string currentfolder;
string path;
protected System.Web.UI.HtmlControls.HtmlInputButton sub;
![](/Images/OutliningIndicators/InBlock.gif)
private static string[] extentionlist = ("ai|pdf|asp|txt|asx|avi|bmp|c|cda|cgi|cpp|cs|css|dsw|fla|gif|h|htm|html|java|jpg|js|midi|mov|mp3|mpg|php|png|psd|" +
"psp|rar|rm|sln|swf|tiff|unkown|wav|wm|wma|wmd|wmv|xml|zip").Split('|');
![](/Images/OutliningIndicators/InBlock.gif)
private void DisplayList()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Filepanel.Controls.Clear();
![](/Images/OutliningIndicators/InBlock.gif)
FileInfoList infolist = new FileInfoList(path);
FileInfo[] filelist = infolist.FileList;
DirectoryInfo[] directorylist = infolist.DirectoryList;
![](/Images/OutliningIndicators/InBlock.gif)
if(currentfolder != "")
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Panel holder = new Panel();
holder.CssClass = "imageholder";
HtmlImage image = new HtmlImage();
image.Src = "fileimages/parent.jpg";
image.Attributes["class"] = "img";
image.Attributes["unselectable"]="on";
image.Attributes["align"] = "absmiddle";
![](/Images/OutliningIndicators/InBlock.gif)
holder.Attributes["unselectable"]="on";
holder.Attributes["onclick"]="divClick(this,'');";
if(currentfolder.IndexOf("\") == -1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
holder.Attributes["ondblclick"]="gotoFolder('" + rootpath + "','');";
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
holder.Attributes["ondblclick"]=("gotoFolder('" + rootpath + "','" + currentfolder.Substring(0, currentfolder.LastIndexOf("\", currentfolder.Length - 2, currentfolder.Length - 1) + 1) + "');").Replace("\", "\\");
}
holder.Controls.Add(image);
![](/Images/OutliningIndicators/InBlock.gif)
Panel mainpanel = new Panel();
mainpanel.CssClass = "imagespacer";
mainpanel.Controls.Add(holder);
![](/Images/OutliningIndicators/InBlock.gif)
Panel foldertitle = new Panel();
foldertitle.CssClass = "titleHolder";
foldertitle.Controls.Add(new LiteralControl("返回"));
![](/Images/OutliningIndicators/InBlock.gif)
mainpanel.Controls.Add(foldertitle);
![](/Images/OutliningIndicators/InBlock.gif)
Filepanel.Controls.Add(mainpanel);
}
![](/Images/OutliningIndicators/InBlock.gif)
foreach(DirectoryInfo info in directorylist)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Panel holder = new Panel();
holder.CssClass = "imageholder";
HtmlImage image = new HtmlImage();
image.Src = "fileimages/folder.jpg";
image.Attributes["class"] = "img";
image.Attributes["unselectable"]="on";
image.Attributes["align"] = "absmiddle";
holder.Attributes["unselectable"]="on";
holder.Attributes["onclick"]="divClick(this,'');";
holder.Attributes["ondblclick"] = ("gotoFolder('" + rootpath + "','" + currentfolder + info.Name + "\');").Replace("\", "\\");
holder.Controls.Add(image);
![](/Images/OutliningIndicators/InBlock.gif)
Panel mainpanel = new Panel();
mainpanel.CssClass = "imagespacer";
mainpanel.Controls.Add(holder);
![](/Images/OutliningIndicators/InBlock.gif)
Panel foldertitle = new Panel();
foldertitle.CssClass = "titleHolder";
foldertitle.Controls.Add(new LiteralControl(info.Name));
![](/Images/OutliningIndicators/InBlock.gif)
mainpanel.Controls.Add(foldertitle);
![](/Images/OutliningIndicators/InBlock.gif)
Filepanel.Controls.Add(mainpanel);
}
![](/Images/OutliningIndicators/InBlock.gif)
foreach(FileInfo info in filelist)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Panel holder = new Panel();
holder.CssClass = "imageholder";
HtmlImage image = new HtmlImage();
string extention = info.Extension.ToLower().Substring(1);
foreach(string str in extentionlist)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(str == extention)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
image.Src = "fileimages/" + extention + ".jpg";
break;
}
}
if(image.Src == "")
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
image.Src = "fileimages/unkown.jpg";
}
image.Attributes["class"] = "img";
image.Attributes["unselectable"]="on";
image.Attributes["align"] = "absmiddle";
![](/Images/OutliningIndicators/InBlock.gif)
holder.Attributes["onclick"]="divClick(this,'" + info.Name + "');";
holder.Attributes["ondblclick"]=("returnFile('" + rootpath + "','" + currentfolder + info.Name + "','" +FormatFileSize(info.Length) + "');").Replace("\", "\\");
holder.Attributes["unselectable"]="on";
holder.Controls.Add(image);
![](/Images/OutliningIndicators/InBlock.gif)
Panel mainpanel = new Panel();
mainpanel.CssClass = "imagespacer";
mainpanel.Controls.Add(holder);
![](/Images/OutliningIndicators/InBlock.gif)
Panel foldertitle = new Panel();
foldertitle.CssClass = "titleHolder";
foldertitle.Controls.Add(new LiteralControl(info.Name + "<br>" + FormatFileSize(info.Length)));
![](/Images/OutliningIndicators/InBlock.gif)
mainpanel.Controls.Add(foldertitle);
![](/Images/OutliningIndicators/InBlock.gif)
Filepanel.Controls.Add(mainpanel);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
private string GetRelativePath(string path, string path2)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return path.Replace(path2 + "\", "");
}
![](/Images/OutliningIndicators/InBlock.gif)
private string FormatFileSize(long length)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(length < 0.5 * 1024 * 1024)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return (length / 1024f).ToString("##0.00K");
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return ((float)length / (1024 * 1024)).ToString("##0.00M");
}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.sub.ServerClick += new System.EventHandler(this.sub_ServerClick);
this.Load += new System.EventHandler(this.Page_Load);
![](/Images/OutliningIndicators/InBlock.gif)
}
#endregion
![](/Images/OutliningIndicators/InBlock.gif)
private void sub_ServerClick(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
;
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
public class FileInfoList
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
public FileInfoList()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
isruned = false;
}
![](/Images/OutliningIndicators/InBlock.gif)
public FileInfoList(string path):this()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.path = path;
}
![](/Images/OutliningIndicators/InBlock.gif)
private FileInfo[] filelist;
private DirectoryInfo[] directorylist;
private string path;
private bool isruned;
![](/Images/OutliningIndicators/InBlock.gif)
public string Path
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return path;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{path = value;}
}
![](/Images/OutliningIndicators/InBlock.gif)
public FileInfo[] FileList
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(!isruned)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
RefreshInfo();
}
![](/Images/OutliningIndicators/InBlock.gif)
return filelist;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
public DirectoryInfo[] DirectoryList
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(!isruned)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
RefreshInfo();
}
![](/Images/OutliningIndicators/InBlock.gif)
return directorylist;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
public void RefreshInfo()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
DirectoryInfo directory = new DirectoryInfo(path);
![](/Images/OutliningIndicators/InBlock.gif)
filelist = directory.GetFiles();
directorylist = directory.GetDirectories();
![](/Images/OutliningIndicators/InBlock.gif)
isruned = true;
}
}
}
![](/Images/OutliningIndicators/None.gif)
filelist.aspx
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<%
@ Page language="c#" Codebehind="filelist.aspx.cs" AutoEventWireup="false" Inherits="hwtkd.manage.filelist" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>filelist</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<style>
BODY {
}{ BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; BACKGROUND: #ffffff; PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; BORDER-LEFT: 0px; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: 0px }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
BODY {
}{ FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: "宋体",Verdana, Arial, Helvetica, sans-serif }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
TR {
}{ FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: "宋体",Verdana, Arial, Helvetica, sans-serif }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
TD {
}{ FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: "宋体",Verdana, Arial, Helvetica, sans-serif }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
DIV.imagespacer {
}{ FLOAT: left; MARGIN: 5px; FONT: 10pt verdana; OVERFLOW: hidden; WIDTH: 120px; HEIGHT: 126px; TEXT-ALIGN: center }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
DIV.imageholder {
}{ BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 100px; PADDING-TOP: 0px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 100px ;valign:absmiddle;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
DIV.titleholder {
}{ FONT-SIZE: 8pt; OVERFLOW: hidden; WIDTH: 100px; FONT-FAMILY: ms sans serif, arial; WHITE-SPACE: nowrap; TEXT-OVERFLOW: ellipsis }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
.img {
}{ WIDTH: 72px; HEIGHT: 72px;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
DIV.main{
}{
width=100%; height:100%; overflow: auto;
}
</style>
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<script language="javascript">![](/Images/dot.gif)
lastDiv = null;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function divClick(theDiv,filename)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (lastDiv)
{
lastDiv.style.border = "1 solid #CCCCCC";
}
lastDiv = theDiv;
theDiv.style.border = "2 solid #316AC5";
document.getElementById("SelectedFile").value = filename;
![](/Images/OutliningIndicators/InBlock.gif)
}
function gotoFolder(rootfolder,newfolder)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
{
document.getElementById("RootFolder").value = rootfolder;
document.getElementById("CurrentFolder").value = newfolder;
__doPostBack('sub','');
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function returnFile(rootfolder,filepath,filesize)
{
var arr = new Array();
arr["rootfolder"] = rootfolder;
arr["filepath"] = filepath;
arr["filesize"] = filesize;
window.parent.returnValue = arr;
window.parent.close();
}
</script>
<base target="_self">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table width="100%" height="100%" border="0" cellpadding="3" cellspacing="0">
<tr>
<td><asp:Panel id="Filepanel" runat="server" CssClass="main"></asp:Panel></td>
</tr>
<tr>
<td height="16" style="padding-left:10px;border-top: 1 solid #999999; background-color:#99ccff;"><INPUT type="button" value="刷新" id="sub" runat="server"></td>
</tr>
</table>
<input type="hidden" id="SelectedFile" runat="server"> <input type="hidden" id="RootFolder" Value="images" runat="server">
<input type="hidden" id="CurrentFolder" Value="images" runat="server">
</form>
</body>
</HTML>
![](/Images/OutliningIndicators/None.gif)
filelist.aspx页面需要另外一个页面用调用
<script language=javascript>
function FindFile()
{
var arr=window.showModalDialog("filelist.aspx?root=" + window.encodeURIComponent("upload\file\"), "", "dialogWidth:570px;status:no");
if(arr == null)
return;
var arr1=new String(arr["rootfolder"]);
var arr2=new String(arr["filepath"]);
var arr3 = new String(arr["filesize"]);
document.getElementById("URL").value = format(arr1 + arr2);
document.getElementById("Size").value = arr3;
}
function format(strin)
{
strout="";
for(i=0;i<strin.length;i++)
{
s=strin.charAt(i);
if(s=='\')
strout+="/";
else
strout+=s;
}
return strout;
}
</script>