Serverside Filebrowser
1 svar · 534 visningar · startad av Gildebrand
Ja det är inga problem. Jag har byggt en sådan fast för ett EPiserver intranät.
Jag gjorde det enkelt och band till en listview. Jag hade också lite ikoner etc men jag tror koden nedan får dig på rätt spår :)
Tilläggas bör att jag hade sökvägen som en prop i EPitemplaten så att administratören kunde skapa en ny sida med sökväg till den huvudfolder på filservern som tänkta användare skulle få se.
Lite exempel :)
public string FilePath { get; set; }
private string[] CurrentPath{
get { return (string[]) (ViewState["CurrentPath"]); }
set { ViewState["CurrentPath"] = value; }
}
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
this.CurrentPath = new string[]{};
ShowDirectory();
}
}
private string GetCurrentPath(){
string folder = this.FilePath;
foreach (string part in this.CurrentPath)
folder = Path.Combine(folder, part);
return folder;
}
private void ShowDirectory(){
WindowsImpersonationContext impersonationContext = ((WindowsIdentity)Page.User.Identity).Impersonate();
string folder = GetCurrentPath();
var dirInfo = new DirectoryInfo(folder);
lvFolders.DataSource = dirInfo.GetDirectories();
lvFolders.DataBind();
lvFiles.DataSource = dirInfo.GetFiles();
lvFiles.DataBind();
ibUp.Visible = this.CurrentPath.Length > 0;
impersonationContext.Undo();
}
protected void DoGoToFolder(object sender, CommandEventArgs e){
this.CurrentPath = this.CurrentPath.Concat(new[]{e.CommandArgument.ToString()}).ToArray();
ShowDirectory();
}
protected void DoBrowseUp(object sender, EventArgs e){
this.CurrentPath = this.CurrentPath.Take(this.CurrentPath.Length - 1).ToArray();
ShowDirectory();
}