论Web控件开发 - 完美上传下载控件“新”(一)
为了增加人气,本人特悔过自新从新作人:),将本人开发的上传下载控件一一解析,期望能略微提升一点人气:) ,另请访问本控件示例站点
一、控件开发思想
目前在本人开发的很多项目中都会遇到文件上传下载的问题,为了一次性解决所有这些令人头痛的问题,我特意开发了这个组件。而为了满足大多数的应用场合,在开发之前我特意总结了需要用到上传下载控件的三种场合,并使自己开发的控件完全适应这三种场合。
场合一:
上传到服务器端的文件名为服务器端指定的文件名,比如我想为某一电子产品维护驱动程序下载,而项目要求下载的文件名必需为
string.Format("{0}_{1}.zip" ,productID, OSName)。如AP2000_WinXp.Zip。
场合二:
上传到服务器端的文件名为自动生成,主要用来对上传文件量比较大,而对名称没有要求的场合,如新闻中所带的图片等等。
场合三:
上传到服务器端的文件名为客户端的文件名,就象博客中插入图片或下载文件一样。
为了满足上面三种场合我特意声明了下面的枚举类:
{
AutoGenerate,
ClientSide,
ServerSide
}
同时声明如下属性:
NotifyParentProperty(true),
Category("Appearance"),
DefaultValue(typeof(FileNameType),"ClientSide")
]
public FileNameType UploadFileNameType
{
get
{
object o = ViewState[UploadFileNameTypeKey];
return(o==null)? FileNameType.ClientSide:(FileNameType)o;
}
set
{
ViewState[UploadFileNameTypeKey] = value;
}
}
而通常来讲对于文件的操作无非是上传、下载、删除三个操作,因此界面上并没有很特别的界面元素并没有很复杂的绘制要求,因此我决定用复合控件来实现它的开发,而且对于上传控件我们也不会关心他的高度,背景色,字体等等因此我决定控件从Control继承而不是从WebControl继承,而为了实现子控件的名称的唯一性控件同时实现了INamingContainer标志接口。
而为了使上传的文件名支持验证器控件所以加了validationPropertyAttribute并指向FileName,为了使客户端的验证正常工作,ASP.Net要求在客户端一定存在以控件ID命名的基于input窗体元素,因此我在创建复合控件时还多加了一个inputhidden控件用来支持客户端的验证,该inputhidden.value属性中保存有当前的上传的文件名称.而为了支持有效扩展名数组的内部属性而增加了ParseChildren(true)和PersistChildren(false)属性,由上面的分析我得到了下面的Upload声明.
ValidationPropertyAttribute("FileName"),
ParseChildren(true),
PersistChildren(false),
ToolboxData("<{0}:Upload runat=server></{0}:Upload>")]
public class Upload : System.Web.UI.Control,INamingContainer
为了增加上传文件类型的验证我声明ExtFilter属性用来保存有效的扩展文件名
private StringItemCollection _extFilters;
[
NotifyParentProperty(true),
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
]
public StringItemCollection ExtFilters
{
get
{
if(_extFilters==null)
{
_extFilters = new StringItemCollection();
if(this.IsTrackingViewState)
_extFilters.TrackViewState();
}
return _extFilters;
}
}
#endregion
至此上传控件中的所有主要元素已经分析清楚,下篇文章我将开始具体的开发工作
转载于:https://www.cnblogs.com/keyss/archive/2005/01/22/95788.html
论Web控件开发 - 完美上传下载控件“新”(一)相关推荐
- 19. web 应用常用功能 -文件上传下载
文章目录 19.1 基本介绍 19.2 文件上传 19.2.1 文件上传的基本原理 19.2.2 文件上传应用实例 19.2.3 文件上传注意事项和细节 19.3 文件下载 19.3.1 文件下载的原 ...
- 【微信开发】上传下载多媒体文件
最近一段时间,开始入手了微信开发.感觉挺有意思的,虽然目前还是遇到了许多解决不了的问题. 上传下载多媒体文件,这个作为高级接口的一部分功能,可能使用的人并不多,所以现在网上关于这个接口的使用教程很少. ...
- wxpython开发的上传下载功能
上传资料的小程序python wx import wx import win32api import wmi import os import shutil import threading impo ...
- oracle asp.net上传 下载 文件大小只有32kb,asp默认上传大小
asp.net 上传大文件大小控制方案 .NET默认允许上传4M的文件. 修改 Machine.config 文件,改动MaxRequestLength 参数的值.在c:\winnt\microsof ...
- Java实现FTP批量大文件上传下载
用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...
- 支持国产ARM64架构部署,支持使用rz、sz命令上传下载文件,JumpServer堡垒机v2.12.0发布
支持国产ARM64架构部署,JumpServer堡垒机v2.12.0发布 7月19日,JumpServer开源堡垒机正式发布v2.12.0版本.在这一版本中,JumpServer新增支持ARM64架构 ...
- 使用()控件的saveas方法可以将上传文件保存到服务器.,NET开发-FileUpload上传控件HasFile、FileName、SaveAs()的使用...
.NET开发-FileUpload控件 1. FileUpload控件概述 在ASP.NET WebForm的标准控件中,可以使用FileUpload控件实现客户端文件(任意类型的文件)的上传,上传后 ...
- 文件的上传下载功能的实现(包括进度条)[telerik控件]
文件的上传下载功能的实现(包括进度条) 1.准备工作 首先我们需要Telerik控件,数据库,上传文件文件夹. Telerik控件: RadUpload.RadProgressManager.RadP ...
- [系列文章]上传文件管理控件v2
一.引言: 开发v1的时候,遇到很多困难(因为我是新手),于是就上网找了一些资料. 其中,这篇<数据绑定的总结 >文章(http://www.cnblogs.com/qingtianyzl ...
- 在EasyUI项目中使用FileBox控件实现文件上传处理
我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是J ...
最新文章
- iOS黑科技之(CoreImage)静态人脸识别(一)
- What is mobile platform?
- python编程绘图库turtle如何安装_Python绘图库Turtle详细分析
- C++11 initializer_list 和 Range-based for loop 学习理解
- 钱币掉落动画android,mpvue实现小程序签到金币掉落动画(api实现)
- 【算法】图的基本介绍 以及 存储方式
- WPF备忘录(1)有笑脸,有Popup
- 二进制修改linux文件,linux下的二进制文件操作
- 全志平台BSP裁剪(2)附件一 General setup配置说明
- 【Android进阶】Android仿淘宝商品浏览滑(拖)动查看详情界面
- matlab 采样开关,UPS单模块10kVA单相电压型SPWM逆变器的Simulink模型建立及仿真分析...
- IP抓包精准定位教程
- python穷举法列举_穷举法
- 删除文件,提示错误0x80070091
- Android中ButterKnife的使用
- WinEdt编译提示pdf文件打不开,Cannot Run pdf
- xpr文件格式用什么打开
- 如何将一个图片转换为一个链接
- 【Git】1090- 我在工作中是如何使用Git的
- 杭州电子科技大学acm--2019
热门文章
- 【Paper】AAAI 2020 故事生成模型 之 角色一致性
- python生成词云教程(附带QQ聊天记录生成词云实战)
- 机器学习入门——多项式回归
- 牢记将iPhone特色硬件优势发挥到极致
- Transact-SQL管理与开发实例精粹
- 海量数据挖掘MMDS week2: Nearest-Neighbor Learning最近邻学习
- break continue区别和用法_[分享]Python专题之流程控制(进阶用法2)
- python一维数组聚类
- cmake错误:Could not find a package configuration file provided by 的一种解决方法
- 《Android 源码设计模式解析与实战》— Android 书籍