为了增加人气,本人特悔过自新从新作人:),将本人开发的上传下载控件一一解析,期望能略微提升一点人气:) ,另请访问本控件示例站点

一、控件开发思想

目前在本人开发的很多项目中都会遇到文件上传下载的问题,为了一次性解决所有这些令人头痛的问题,我特意开发了这个组件。而为了满足大多数的应用场合,在开发之前我特意总结了需要用到上传下载控件的三种场合,并使自己开发的控件完全适应这三种场合。

场合一:
    上传到服务器端的文件名为服务器端指定的文件名,比如我想为某一电子产品维护驱动程序下载,而项目要求下载的文件名必需为
string.Format("{0}_{1}.zip" ,productID, OSName)。如AP2000_WinXp.Zip。

场合二:
    上传到服务器端的文件名为自动生成,主要用来对上传文件量比较大,而对名称没有要求的场合,如新闻中所带的图片等等。

场合三:
    上传到服务器端的文件名为客户端的文件名,就象博客中插入图片或下载文件一样。

为了满足上面三种场合我特意声明了下面的枚举类:

    public enum FileNameType
    {
        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声明.

    [DefaultProperty("FileName"), 
    ValidationPropertyAttribute("FileName"),
    ParseChildren(true),
    PersistChildren(false),
    ToolboxData("<{0}:Upload runat=server></{0}:Upload>")]
    public class Upload : System.Web.UI.Control,INamingContainer

为了增加上传文件类型的验证我声明ExtFilter属性用来保存有效的扩展文件名

        ExtFilters#region ExtFilters
        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控件开发 - 完美上传下载控件“新”(一)相关推荐

  1. 19. web 应用常用功能 -文件上传下载

    文章目录 19.1 基本介绍 19.2 文件上传 19.2.1 文件上传的基本原理 19.2.2 文件上传应用实例 19.2.3 文件上传注意事项和细节 19.3 文件下载 19.3.1 文件下载的原 ...

  2. 【微信开发】上传下载多媒体文件

    最近一段时间,开始入手了微信开发.感觉挺有意思的,虽然目前还是遇到了许多解决不了的问题. 上传下载多媒体文件,这个作为高级接口的一部分功能,可能使用的人并不多,所以现在网上关于这个接口的使用教程很少. ...

  3. wxpython开发的上传下载功能

    上传资料的小程序python wx import wx import win32api import wmi import os import shutil import threading impo ...

  4. oracle asp.net上传 下载 文件大小只有32kb,asp默认上传大小

    asp.net 上传大文件大小控制方案 .NET默认允许上传4M的文件. 修改 Machine.config 文件,改动MaxRequestLength 参数的值.在c:\winnt\microsof ...

  5. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  6. 支持国产ARM64架构部署,支持使用rz、sz命令上传下载文件,JumpServer堡垒机v2.12.0发布

    支持国产ARM64架构部署,JumpServer堡垒机v2.12.0发布 7月19日,JumpServer开源堡垒机正式发布v2.12.0版本.在这一版本中,JumpServer新增支持ARM64架构 ...

  7. 使用()控件的saveas方法可以将上传文件保存到服务器.,NET开发-FileUpload上传控件HasFile、FileName、SaveAs()的使用...

    .NET开发-FileUpload控件 1. FileUpload控件概述 在ASP.NET WebForm的标准控件中,可以使用FileUpload控件实现客户端文件(任意类型的文件)的上传,上传后 ...

  8. 文件的上传下载功能的实现(包括进度条)[telerik控件]

    文件的上传下载功能的实现(包括进度条) 1.准备工作 首先我们需要Telerik控件,数据库,上传文件文件夹. Telerik控件: RadUpload.RadProgressManager.RadP ...

  9. [系列文章]上传文件管理控件v2

    一.引言: 开发v1的时候,遇到很多困难(因为我是新手),于是就上网找了一些资料. 其中,这篇<数据绑定的总结 >文章(http://www.cnblogs.com/qingtianyzl ...

  10. 在EasyUI项目中使用FileBox控件实现文件上传处理

    我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是J ...

最新文章

  1. iOS黑科技之(CoreImage)静态人脸识别(一)
  2. What is mobile platform?
  3. python编程绘图库turtle如何安装_Python绘图库Turtle详细分析
  4. C++11 initializer_list 和 Range-based for loop 学习理解
  5. 钱币掉落动画android,mpvue实现小程序签到金币掉落动画(api实现)
  6. 【算法】图的基本介绍 以及 存储方式
  7. WPF备忘录(1)有笑脸,有Popup
  8. 二进制修改linux文件,linux下的二进制文件操作
  9. 全志平台BSP裁剪(2)附件一 General setup配置说明
  10. 【Android进阶】Android仿淘宝商品浏览滑(拖)动查看详情界面
  11. matlab 采样开关,UPS单模块10kVA单相电压型SPWM逆变器的Simulink模型建立及仿真分析...
  12. IP抓包精准定位教程
  13. python穷举法列举_穷举法
  14. 删除文件,提示错误0x80070091
  15. Android中ButterKnife的使用
  16. WinEdt编译提示pdf文件打不开,Cannot Run pdf
  17. xpr文件格式用什么打开
  18. 如何将一个图片转换为一个链接
  19. 【Git】1090- 我在工作中是如何使用Git的
  20. 杭州电子科技大学acm--2019

热门文章

  1. 【Paper】AAAI 2020 故事生成模型 之 角色一致性
  2. python生成词云教程(附带QQ聊天记录生成词云实战)
  3. 机器学习入门——多项式回归
  4. 牢记将iPhone特色硬件优势发挥到极致
  5. Transact-SQL管理与开发实例精粹
  6. 海量数据挖掘MMDS week2: Nearest-Neighbor Learning最近邻学习
  7. break continue区别和用法_[分享]Python专题之流程控制(进阶用法2)
  8. python一维数组聚类
  9. cmake错误:Could not find a package configuration file provided by 的一种解决方法
  10. 《Android 源码设计模式解析与实战》— Android 书籍