从零开始编写自己的C#框架(23)——上传组件使用说明

文章导航


  1、前言

  2、上传组件功能说明

  3、数据库结构

  4、上传配置管理

  5、上传组件所使用到的类

  6、上传组件调用方法

  7、效果演示

  8、小结


  1、前言

  本系列所使用的是上传组件是大神July开发的,他为人比较低调,一直都没有写博。为了感谢他将这么好的插件开源出来,在这里简单的为他宣传一下。在我的圈子当中,他是一位非常牛的人,前端方面非常精通,没有解决不了的兼容性问题,而后端开发又精通多种开发语言(PHP、C#、VB、JAVA等),经手开发过的大中小型项目过百。承接各种外包开发,想联系他的话可以加入Q群327360708找July。

  2、上传组件功能说明

  本上传组件已将上传相关的功能都封装好了,在使用的时候,只需要使用简单的几行代码,就可以实现图片文件检验、上传权限验证、上传路径相关文件夹创建、文件上传、按配置生成各种规格(缩放)图片和进行压缩、加水印、关联数据表、自动删除旧文件与数据表记录、修改配置后所有图片文件重新生成等功能。

  支持asp.net控件、html控件、编辑器(又分为本地上传与远程上传两种)与swf(这种控件上传方式没有用过,目前还不太清楚怎么调用,等有空再请教July大神)等方式上传。

  3、数据库结构

  本上传组件需要创建三个数据表

  上传类型表用于设置可以上传的文件类型

  

  上传配置表,它的用途大家看看字段说明就知道了,而我们主要将它用在上传图片的处理上,比如上传一张图片要生成那些格式(大、中、小与推荐图),图片规格是什么(宽、高与质量),用不用加水印,按什么比例生成等,在这里配置后马上生效,上传生成的图片规格跟着改变。

  

  上传文件管理表记录当前系统中,所有通过本上传组件上传到服务器中的文件信息,方便管理员进行管理操作,比如前端UI重新设计后,某些页面图片规格改变了,正常情况下需 要设计师手动或使用某些软件将这些图片全部重新修改,这样处理工作量大且容易出错,而本组件则可以通过在上传配置中重新设置不同大小的图片生成规格,然后点击全部图片重新生成按钮后,程序就会在本管理表中将指定类型与配置的所有图片按新配置,使用原来的文件名称逐个重新生成出来。

  

  4、上传配置管理

  1)进入后端管理系统,系统管理=》基础设置=》上传类型设置

  在这里添加与管理各种允许上传的文件类型,见下图

  

  

  2)系统管理=》基础设置=》上传配置管理

  在这里设置上传的各种规则,所有需要调用到上传组件的地方,都需要这里进行配置。创建好以后获取对应的Id值,在开发的代码中绑定记录,具体怎么使用后面会讲到

  上传配置列表

  

  上传配置编辑页面

  

  广告内容管理页面,我们上传了一个广告图片

  

  这是上传成功后,在上传文件夹中对应生成的图片,大家可以试试修改生成规格后重新上传,或点击“已上传文件管理”页面中的,看看图片变化

  

  3)系统管理=》基础设置=》已上传文件管理

  在这里显示所有通过本上传组件上传到服务器的所有记录,可以将直接将一些不要的文件删除,也可以点击“图片全部重新生成”按钮生成图片。

  

  5、上传组件所使用到的类

  上传组件所用的的类存放路径与说明(原版虽然分层,但没这么多文件,使用SQLHelper来执行数据库更新,被我改得好像很复杂的样子,呵呵...看起来是不是有点高大上,很难理解兼很复杂的样子+_+...)

项目 文件夹路径 文件名 说明
DotNet.Utilities File DirFileHelper.cs 文件夹与文件操作类,主要用于文件夹创建、上传文件添加、删除,以及其他相关的文件操作函数
DotNet.Utilities Uploader Uploader.cs 上传类,文件上传、检查、生成、水印等各种操作
Solution.DataAccess SubSonic
UploadConfig.cs

UploadFile.cs

UploadType.cs

......

模板生成的上传组件数据表相关实体类,以及其他数据层操作类
Solution.Logic.Managers Application UploadFileBll.cs 上传逻辑类,主要用于权限检查、上传文件的相关判断处理、增改删上传组件相关的数据库信息、关联相关数据表等功能
Solution.Logic.Managers SubSonic
UploadConfigBll.cs

UploadFileBll.cs

UploadTypeBll.cs

T4模板生成的几个上传表对应的逻辑类文件,主要给第4点那些后端管理页面所使用
Solution.Web.Managers Application FileUpload.ashx UI层编辑器调用的上传接口
Solution.Web.Managers Application RemoteUpload.ashx UI层编辑器使用远程上传接口(在编辑器上粘贴有图片时,将图片下载到服务器上,实现远程上传)

  6、上传组件调用方法

  代码中有三种调用上传的方法,一种是ASP.NET控件,一种是html控件,还有是远程上传(即传入远程图片Url自动下载更新)

  ASP.NET控件上传调用方法

 1 //这个放在cs文件Page_Load函数的前面,用于生成一个随一个Key,以便上传完成后已上传文件管理表绑定对应Id
 2 protected string RndKey = RandomHelper.GetRndKey();
 3
 4                 #region 上传图片
 5                 //判断前端的ASP.NET上传控件是否选择有上传文件
 6                 if (this.filePhoto.HasFile && this.filePhoto.FileName.Length > 3)
 7                 {
 8                     //将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用
 9                     int vid = 7; //7    广告
10                     //---------------------------------------------------
11                     //创建上传实体
12                     var upload = new UploadFile();
13                     //调用ASP.NET上传控件上传函数,并获取上传成功或失败信息
14                     result = new UploadFileBll().Upload_AspNet(this.filePhoto.PostedFile, vid, RndKey,
15                         OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),
16                         upload);
17                     this.filePhoto.Dispose();
18                     //---------------------------------------------------
19                     //没有返回信息时表示上传成功
20                     if (result.Length == 0)
21                     {
22                         //将上传到服务器后的路径赋给广告实体对应字段
23                         model.AdImg = upload.Path;
24                     }
25                     else
26                     {
27                         //将出错写入日志中
28                         CommonBll.WriteLog("上传出错:" + result); //收集异常信息
29                         //弹出出错提示
30                         return "上传出错!" + result;
31                     }
32                 }
33                 //如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片
34                 if (model.Id > 0)
35                 {
36                     //删除旧图片
37                     UploadFileBll.GetInstence()
38                         .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,
39                             model.Id, model.AdImg);
40
41                     //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
42                     UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
43                 }
44
45                 #endregion

  上面代码功能大家请看注释说明,在调用时直接复制上面代码然后修改vid的值、页面上传控件名称(filePhoto改为你自己设置的名称)、当前数据表名称(AdvertisementTable,这个一般在替换的时候已经改好了)和存放上传文件路径字段(AdImg改为当前数据表对应字段名称)就可以了。

  html控件上传方法

 1                 #region 上传图片
 2                 //将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用
 3                 int vid = 7; //7    广告
 4                 //---------------------------------------------------
 5                 //创建上传实体
 6                 var upload = new UploadFile();
 7                 //调用ASP.NET上传控件上传函数,并获取上传成功或失败信息
 8                 result = new UploadFileBll().Upload_Web(vid, RndKey,
 9                     OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),
10                     upload, "Html上传控件名称");
11                 this.filePhoto.Dispose();
12                 //---------------------------------------------------
13                 //没有返回信息时表示上传成功
14                 if (result.Length == 0)
15                 {
16                     //将上传到服务器后的路径赋给广告实体对应字段
17                     model.AdImg = upload.Path;
18                 }
19                 else
20                 {
21                     //将出错写入日志中
22                     CommonBll.WriteLog("上传出错:" + result); //收集异常信息
23                     //弹出出错提示
24                     return "上传出错!" + result;
25                 }
26
27                 //如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片
28                 if (model.Id > 0)
29                 {
30                     //删除旧图片
31                     UploadFileBll.GetInstence()
32                         .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,
33                             model.Id, model.AdImg);
34
35                     //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
36                     UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
37                 }
38
39                 #endregion

  与前面不同的只是调用的上传函数Upload_Web不一样而已,不过这段代码没有直接测试过,理论上是没有问题的,呵呵...(以前前端项目中使用过正常,不过代码与本框架的不一样,所以就不贴出来了)

  远程上传方法

  这种上传方法需要配合编辑器使用,框架中的编辑器已设置好了,所以不进行详细说明

  7、效果演示

  1)上传广告图片后修改图片配置后重新生成演示

  演示前大家先更新一下代码,打开AdvertisementEdit.aspx.cs文件,找到AdvertisementBll.GetInstence().Save(this, model),在这个代码后添加下面代码,之前发布的代码忘了添加新增记录时,同步绑定图片记录Id了

1                 #region 同步更新上传图片表绑定Id
2                 if (id == 0)
3                 {
4                     //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
5                     UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
6                 }
7
8                 #endregion

时间: 2024-10-05 23:01:39

从零开始编写自己的C#框架(23)——上传组件使用说明的相关文章

从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大,基本将Web层要使用到的大部分函数都用模板生成了出来,而模板中的函数,很多也是互相关联调用的.另外在DotNet.Utilities(公共函数项目)中也添加与修改了一些类和函数. 需要特别说明的是,在逻辑层添加了July大神编写的超强上传类,具体怎么使用功能怎么强大,在后面调用到时会用一个章节详细说

从零开始编写自己的C#框架(18)——Web层后端权限模块——菜单管理

从本章开始,主要讲解的是页面中对框架相关功能的调用方法,比如列表页面(又分为有层次感列表和普通列表).编辑页面.多标签页面等,只要熟悉了这些函数的使用方法,那么开发起来就会很便捷了. 1.如图先创建菜单列表与编辑页面 MenuInfoList.aspx 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MenuInfoList.aspx.cs" Inherits=&quo

从零开始编写自己的C#框架(15)——Web层后端登陆功能

对于一个后端管理系统,最重要内容之一的就是登陆页了,无论是安全验证.用户在线记录.相关日志记录.单用户或多用户使用帐号控制等,都是在这个页面进行处理的. 1.在解决方案中创建一个Web项目,并将它设置为启动项 2.添加引用 3.添加WebManage文件夹与Login.aspx文件 4.添加登陆页面HTML代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx

从零开始编写自己的C#框架(1)——前言

原文:从零开始编写自己的C#框架(1)--前言 记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后来也差不多,自学了很多不同的知识,都一直只能自己默默的克服一个又一个困难.所以这几年带一些应届生或只有一两年经验的新人时,都会同他们讲:你们现在太幸福了,有问题可以找度娘,还可以找我来解决.做为过来人,能深深的体会到刚入门的时候,没有系统的介绍和老师指

从零开始编写自己的C#框架(19)——Web层后端权限模块

不知不觉本系统写了快三个月了,最近写页面的具体功能时感觉到有点吃力,很多地方如果张嘴来讲的话可以说得很细,很全面,可写成文字的话,就不太会写了,有些地方想讲得清晰的话,得用多几倍的文字+实例+变化中的图片才能表达得清楚,而写这些又太费时间了,近段时间又特忙,所以只能是尽力而为,希望大家自行研究,如果有什么地方不明白的,发发评论或邮件给我,我再重新详细讲解. 说回正题,对于页面访问权限以及每个按键的权限控制,很久以前用过好几种不同的方法,比如为每个控件分配名称或编码,然后在写代码时绑定这些值,又比

从零开始编写自己的C#框架(21)——添加分类类型页面

页面权限与页面控件权限经过简单的调试后,终于启用起来了,以后大家添加新页面时,就必须按照本章介绍的方法,将你新增的页面注册到系统中,这样才能访问与进行相关操作. 下面讲讲如何创建一个分类类型的页面. 分类类型,顾名思义指的是按照一定规律.特点进行归类划分,放到一块的集合.我们开发时这些分类类型,经常用下拉列表来表现,如果有多级分类时,采用的是下拉树列表方式显示. 普通下拉列表 下拉树列表 下面将介绍如何从创建数据表.修改文件到权限绑定逐个步骤进行说明. 首先,我们先要创建好数据表 我们打开数据字

从零开始编写自己的C#框架(17)——Web层后端首页

后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显示公司公告.公司新闻.内部短消息.个人事务.各种业务提醒......等各种内容,这些大家可以需要去进行呈现. 先上代码 Main.aspx 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu

从零开始编写自己的C#框架(9)——数据库设计与创建

对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常......当然不同的公司与项目要求不同,初学者要学会适应不同的项目开发要求,使用本框架开发时,必须严格按照本章节的要求来设计数据库,不然可能会产生不可控的异常. 从零开始编写自己的C#框架 数据库设计规范   文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: C#框架 当前版本

从零开始编写自己的C#框架——框架学习补充说明

非常感谢轩辕公子提出了对本框架的看法与意见,所以这里也将回复贴出来,让大家都了解一下 本系列的快速开发指的是,框架构建完毕后,在这个基础上开发新功能非常快捷方便,基本不用写太多代码就可以在短时间内完成大量的基本功能.当然如果直接将全部代码贴出来,直接上例子的话可能更容易理解,但这样的话对于很多想了解整个框架实现过程的朋友来说,一下子太多代码就很难理解最初的思路了,同时大家也看到每一章都会附上独立的解决方案也是这么一回事,通过循序渐进的方式来进行学习.原本想要写得更细更多章节的,但由于个人空闲时间