91 lines
2.7 KiB
C#
91 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.IO;
|
|
|
|
namespace FineUIPro.Web
|
|
{
|
|
public partial class source_file : PageBase
|
|
{
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!IsPostBack)
|
|
{
|
|
string file = Request.QueryString["file"].ToLower();
|
|
|
|
if (file.StartsWith("http://") || file.StartsWith("https://"))
|
|
{
|
|
desc.Text = String.Format("<br/><br/><a href=\"{0}\" target=\"_blank\">在新窗口打开</a>", file);
|
|
return;
|
|
}
|
|
|
|
// 不是网站根目录下的文件
|
|
if (!UnderRootPath(file))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 不允许下载文件的目录
|
|
string basePath = GetBasePath(file);
|
|
List<string> disallowPaths = new List<string> { "bin", "obj", "upload", "Properties" };
|
|
if (disallowPaths.Contains(basePath))
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
// 只能下载指定类型文件
|
|
string fileType = GetFileType(file);
|
|
List<string> allowFileTypes = new List<string> { "aspx", "ascx", "master", "ashx", "cs", "xml", "css", "js" };
|
|
if (!allowFileTypes.Contains(fileType))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 读取文件内容
|
|
string content = File.ReadAllText(Server.MapPath(file));
|
|
desc.Text = "<pre class=\"prettyprint\">" + HttpUtility.HtmlEncode(content) + "</pre>"; // linenums
|
|
|
|
}
|
|
}
|
|
|
|
private bool UnderRootPath(string fileName)
|
|
{
|
|
string filePath = Server.MapPath(fileName);
|
|
string rootPath = Server.MapPath("~/");
|
|
|
|
return filePath.StartsWith(rootPath);
|
|
}
|
|
|
|
private string GetBasePath(string fileName)
|
|
{
|
|
string filePath = Server.MapPath(fileName);
|
|
string rootPath = Server.MapPath("~/");
|
|
|
|
string basePath = filePath.Substring(rootPath.Length);
|
|
int slashIndex = basePath.IndexOf("\\");
|
|
if (slashIndex >= 0)
|
|
{
|
|
basePath = basePath.Substring(0, slashIndex);
|
|
}
|
|
|
|
return basePath;
|
|
}
|
|
|
|
private string GetFileType(string fileName)
|
|
{
|
|
string fileType = String.Empty;
|
|
|
|
int lastDotIndex = fileName.ToLower().LastIndexOf(".");
|
|
if (lastDotIndex >= 0)
|
|
{
|
|
fileType = fileName.Substring(lastDotIndex + 1);
|
|
}
|
|
|
|
return fileType;
|
|
}
|
|
}
|
|
}
|