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 开源论坛提供全部项目源代码下载和数据库下载。
 
 
 
posted on 2008-10-13 21:05  EntLib  阅读(1399)  评论(2编辑  收藏  举报