Subtext v2.0 定制化开发之上传文件File Upload管理
Subtext v2.0 定制化开发之上传文件File Upload管理
Subtext / EntLib.com Blog 博客后台随笔内容编辑采用最新的FCKEditor 编辑器,可以用来上传图片文件,如GIF/JPG/PNG等等。并且,后台管理还有一个功能『图像库』,也可以用来上传和管理博客自己的图片库。
但是,有点欠缺的是没有上传和管理文件的功能,如一些示例程序等等。http://blog.EntLib.com 开源博客小组定制化开发了此项功能,用来上传和管理文件,并且可以结合Subtext 随笔附件(Enclosure)功能,可以方便在随笔底部显示和管理随笔附件文件,供访客下载。
下面http://blog.EntLib.com 开源博客小组讲解如何定制化开发和使用这一功能。
1. 定制化开发文件上传File Upload 功能
操作界面如下。具体包括文件上传、显示文件列表、删除文件等等功能。
(1)上传文件代码
protected void OnUploadFile(object sender, EventArgs e)
{
string strFileName = txtUploadFile.PostedFile.FileName.Substring(txtUploadFile.PostedFile.FileName.LastIndexOf("\\") + 1);
if (strFileName.Trim().Length == 0)
{
Messages.ShowError("请首先指定需要上传的文件。");
return;
}
try
{
string strFileType = txtUploadFile.PostedFile.ContentType;
int fileSize = txtUploadFile.PostedFile.ContentLength;
string fullFileName = filePath + strFileName;
if (fileSize <= 0)
{
Messages.ShowError("文件大小为零,不允许上传。");
return;
}
else if (File.Exists(fullFileName))
{
// tell the user we can't accept this file.
Messages.ShowError("服务器上已经存在这个文件了. 请重命名这个文件.");
return;
}
else
{
// 确保目录存在
Images.EnsureDirectory(Path.GetFullPath(Path.GetDirectoryName(filePath)));
// 上传文件
txtUploadFile.PostedFile.SaveAs(filePath + strFileName);
Messages.ShowMessage("成功上传了文件!");
FillGrid();
}
}
catch (Exception ex)
{
this.Messages.ShowError(ex.ToString());
}
}
(2)显示文件列表代码
public void FillGrid()
{
DataTable dt = new DataTable("datatable1");
DataColumn dc;
DataRow dr;
dr = dt.NewRow();
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.String");
dc.ColumnName = "filename";
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.Int32");
dc.ColumnName = "filesize";
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.DateTime");
dc.ColumnName = "createdate";
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.String");
dc.ColumnName = "fileURLPath";
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.String");
dc.ColumnName = "fileFullname";
dt.Columns.Add(dc);
// EntLib.com updated
// 检查指定的文件夹是否存在
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
//files list
string[] files = Directory.GetFiles(filePath);
foreach (string fileName in files)
{
dr = dt.NewRow();
FileInfo fi = new FileInfo(fileName);
dr[0] = fi.Name;
dr[1] = (fi.Length / 1000 + 1);
dr[2] = fi.CreationTime;
dr[3] = fileURLPath + fi.Name;
dr[4] = filePath + fi.Name;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
grdFileList.DataSource = dv;
grdFileList.DataBind();
}
(3)删除文件代码
protected void grdFileList_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DeleteFile")
{
//catching the row in which thhe link button is clicked.
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;
string filename = this.grdFileList.DataKeys[index].Value.ToString();
try
{
File.Delete(filename);
Messages.ShowMessage("成功删除了该文件!");
FillGrid();
}
catch (Exception ex)
{
Messages.ShowMessage(ex.ToString());
}
}
}
下一步将结合随笔附件(Enclosure)功能,演示如何使用文件上传功能。
后面文章待续,欢迎交流、分享 Subtext 开源博客平台。
http://forum.EntLib.com 开源论坛提供全部项目源代码下载和数据库下载。