从零开始编写自己的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控件上传调用方法
//这个放在cs文件Page_Load函数的前面,用于生成一个随一个Key,以便上传完成后已上传文件管理表绑定对应Id
protected string RndKey = RandomHelper.GetRndKey(); #region 上传图片
//判断前端的ASP.NET上传控件是否选择有上传文件
if (this.filePhoto.HasFile && this.filePhoto.FileName.Length > )
{
//将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用
int vid = ; //7 广告
//---------------------------------------------------
//创建上传实体
var upload = new UploadFile();
//调用ASP.NET上传控件上传函数,并获取上传成功或失败信息
result = new UploadFileBll().Upload_AspNet(this.filePhoto.PostedFile, vid, RndKey,
OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),
upload);
this.filePhoto.Dispose();
//---------------------------------------------------
//没有返回信息时表示上传成功
if (result.Length == )
{
//将上传到服务器后的路径赋给广告实体对应字段
model.AdImg = upload.Path;
}
else
{
//将出错写入日志中
CommonBll.WriteLog("上传出错:" + result); //收集异常信息
//弹出出错提示
return "上传出错!" + result;
}
}
//如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片
if (model.Id > )
{
//删除旧图片
UploadFileBll.GetInstence()
.Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,
model.Id, model.AdImg); //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
} #endregion
上面代码功能大家请看注释说明,在调用时直接复制上面代码然后修改vid的值、页面上传控件名称(filePhoto改为你自己设置的名称)、当前数据表名称(AdvertisementTable,这个一般在替换的时候已经改好了)和存放上传文件路径字段(AdImg改为当前数据表对应字段名称)就可以了。
html控件上传方法
#region 上传图片
//将当前页面上传文件绑定上传配置表Id为7的记录,给上传组件的逻辑层函数调用
int vid = ; //7 广告
//---------------------------------------------------
//创建上传实体
var upload = new UploadFile();
//调用ASP.NET上传控件上传函数,并获取上传成功或失败信息
result = new UploadFileBll().Upload_Web(vid, RndKey,
OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),
upload, "Html上传控件名称");
this.filePhoto.Dispose();
//---------------------------------------------------
//没有返回信息时表示上传成功
if (result.Length == )
{
//将上传到服务器后的路径赋给广告实体对应字段
model.AdImg = upload.Path;
}
else
{
//将出错写入日志中
CommonBll.WriteLog("上传出错:" + result); //收集异常信息
//弹出出错提示
return "上传出错!" + result;
} //如果是修改,检查用户是否重新上传过广告图片,如果是删除旧的图片
if (model.Id > )
{
//删除旧图片
UploadFileBll.GetInstence()
.Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,
model.Id, model.AdImg); //同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
} #endregion
与前面不同的只是调用的上传函数Upload_Web不一样而已,不过这段代码没有直接测试过,理论上是没有问题的,呵呵...(以前前端项目中使用过正常,不过代码与本框架的不一样,所以就不贴出来了)
远程上传方法
这种上传方法需要配合编辑器使用,框架中的编辑器已设置好了,所以不进行详细说明
7、效果演示
1)上传广告图片后修改图片配置后重新生成演示
演示前大家先更新一下代码,打开AdvertisementEdit.aspx.cs文件,找到AdvertisementBll.GetInstence().Save(this, model),在这个代码后添加下面代码,之前发布的代码忘了添加新增记录时,同步绑定图片记录Id了
#region 同步更新上传图片表绑定Id
if (id == )
{
//同步UploadFile上传表记录,绑定刚刚上传成功的文件Id为当前记录Id
UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);
} #endregion
在广告内容管理页面点击新增
添加后显示效果
生成的文件以及大小
进入上传配置管理,修改广告图片的配置,如下图
进入已上传文件列表,点击图片全部重新生成
查看文件夹中的图片大小,已改变了
2)上传非图片文件演示
新建一个文本文件,然后输入内容
将文本文件名称修改为bbb.jpg
打开广告图片编辑窗口,选择刚改名为bbb.jpg的假图片,点击上传
程序会判断出该文件不是图片,不给予上传
3)远程图片上传演示
复制浏览器上的图片到编辑器,点击远程上传图片按钮
点击查看Html代码,可以看到Url为远程的
打开远程上传程图片界面,点击确定
上传成功
编辑器中显示的图片已经是上传后的了
查看Html对比一下
看看文件夹里上传的文件
8、小结
写到这里,本系列代码部分的说明算是结束了,回头看看与自己订下的方案,还是有不少偏差,自己也觉得很不满意。由于近段时间工作越来越忙,已经没有太多时间兼顾本系列的编写,一些细节也就没空说明,代码部分只能是草草收场了。
有时打开前面所写的章节,自己会感到写得很粗糙,无论文笔或讲述的内容,都存在问题。不过在编写的过程中,自己的确得到了很大的提升,在与众多园友、群友交流的过程中,也学习了很多很多新的知识点,相信如果时间充足,重新写过的话就不会是这个样子了,可能会像本章一样,只是针对一个知识点进行描述,这样会帮忙大家更容易了解。另外,设想中需要绘制的不少流程图或其他相关的图形也没有画出来,更不要说视频了,这些只能是以后有时间再补充了。
对于代码部分,确实像某些朋友所说的那样,由于使用了模板生成,没有对代码进行优化,存在着大量冗余代码,暂时先这样用用吧,反正使用了模板改起来也很方便,对二次开发与维护开发效率也没有影响,以后有时间再看看是否进行优化吧。
学习本框架的开发,首先一定要有ASP.NET的基础,没有基础的话想一下子学习框架开发,那真的很难,就算你直接加我QQ问我,我也很难帮你跳过基础直接学习框架开发。还有就是如果不看前面的文章,想加快速度直接从代码着手,如果你是大神的话这也没有问题,不然想要理解整个开发思路又不想花时间看说明,那我也没办法帮到你,除非你同我在一块工作,我花一天时间为你讲解,那样你可能就会很快上手,能对本框架一知半解了(要全部了解还是得从前面文章学起)。
另外如果学习过程中碰到问题时,可以多Debug尝试自己解决,解决不了再上百度或Google查查,又或者在贴子的评论处发发你的问题,或Email给我,当然在QQ群里问问更方便,很多朋友都乐意为你解答。直接问我也行,不过近来实在太忙了,不可能实时帮你解答遇到的各种问题,必竟我本人也要工作,也要养家糊口。
在学习的过程中,必须要从前面开始看起,从中间查看的话,特别是代码部分,你会一头雾水,因为都是在前面的基础上衍生过来的。当然15到20章看不明白的可以大概的了解一下内容就可以了,直接用21章说明步骤进行操作,或自己创建一些数据表,根据已完成的页面功能复制过去修改几次,那你就会很快的上手。等对使用本框架开发熟悉以后,再去研究底层应用的一些技术,那样就会更容易了解框架结构了。
做上面演示时才发现,原来还存在一些小BUG,所以重新整理了一下,将修改过的文件找出来打包,大家请点击下载更新,或重新下载上一章的解决方案也行
由于框架不是非常成熟,很多朋友不是用来学习而是直接用到项目中,但不熟悉框架引起不少小问题,所以停止提供下载,有需要学习的可以到群共享里下,不便之处敬请谅解。
版权声明:
本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如有问题,可以通过1654937@qq.com 联系我,非常感谢。
发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:327360708 ,大家一起探讨。
更多内容,敬请观注博客:http://www.cnblogs.com/EmptyFS/
从零开始编写自己的C#框架(23)——上传组件使用说明的更多相关文章
- 解决使用elementUI框架el-upload上传组件时session丢失问题
在使用elementui框架上传组件的时候,出现session丢失,后端无法获取到sessionid,导致返回状态为未登陆 查看请求头缺少cookie值 上传组件代码: <el-upload c ...
- vue.js框架图片上传组件
html: <div id="app"> <div class="hello"> <div class="upload& ...
- 从零开始编写自己的C#框架(1)——前言
记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后 ...
- 从零开始编写自己的C#框架 ---- 系列文章
目录: 从零开始编写自己的C#框架(1)——前言从零开始编写自己的C#框架(2)——开发前的准备工作从零开始编写自己的C#框架(3)——开发规范从零开始编写自己的C#框架(4)——文档编写说明从零开始 ...
- 从零开始编写自己的C#框架(17)——Web层后端首页
后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
- 从零开始编写自己的C#框架(20)——框架异常处理及日志记录
最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上.接下来的章节主要都是讲解在本框架的基础上进行开发的小巧. 本框架主要有四 ...
- 从零开始编写自己的C#框架(15)——Web层后端登陆功能
对于一个后端管理系统,最重要内容之一的就是登陆页了,无论是安全验证.用户在线记录.相关日志记录.单用户或多用户使用帐号控制等,都是在这个页面进行处理的. 1.在解决方案中创建一个Web项目,并将它设置 ...
随机推荐
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- 在离线环境中发布.NET Core至Windows Server 2008
在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- video.js
1.github地址 2.常用API: class : video-js: video-js应用视频所需的风格.js功能,比如全屏和字幕. vjs-default-skin: vjs-default- ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- WebApi - 路由
这段时间的博客打算和大家一起分享下webapi的使用和心得,主要原因是群里面有朋友说希望能有这方面的文章分享,随便自己也再回顾下:后面将会和大家分不同篇章来分享交流心得,希望各位多多扫码支持和点赞,谢 ...
- iOS开发之Alamofire源码深度解析
今天博客中的Alamofire源码的版本是以现在最新的3.4版本为例.上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看<详解NSURLSession>,为了就是 ...
- 【Reading Note】算法读书杂记
1 排序 排序基本信息 稳定性:排序前大的数在排序后,大的数依然保持不变就是稳定排序,反之不稳定 内外排序:根据待排序的记录是否放在内存里面区分的.诸如:插入排序(直接插入&希尔).交换排序( ...
- js callee,caller学习
原文地址:js callee,caller学习 /* * caller 返回一个对函数的引用,该函数调用了当前函数. * 如果函数是由顶层调用的,那么 caller包含的就是 null . * 如果在 ...