我自己写的自定义Web的上传控件

web|控件|上传|上传控件

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing;
using System.Drawing.Design;
namespace Yingnet.Common
{
/// <summary>
/// FileUpload 的摘要说明。E:\program\Common\FileUpload.bmp
/// </summary>
[ToolboxBitmap(typeof(Yingnet.Common.FileUpload), "FileUpload.bmp"),
DefaultProperty("Text"), DefaultEvent("Click"),
ToolboxData("<{0}:FileUpload runat=server></{0}:FileUpload>")]
public class FileUpload : System.Web.UI.WebControls.WebControl {
  /// <summary>
  /// 上传按钮
  /// </summary>
  private Button button=new Button();
  /// <summary>
  /// 上传文件个数
  /// </summary>
  private int filenum=1;
  /// <summary>
  /// File对象
  /// </summary>
  private HtmlInputFile[] file;
  /// <summary>
  /// 保存路径,默认为系统的临时目录
  /// </summary>
  private string path=System.IO.Path.GetTempPath();
  /// <summary>
  /// 上传的文件名组
  /// </summary>
  private string[] filename;
  /// <summary>
  /// 后缀文件名组
  /// </summary>
  private string[] suffix;
  /// <summary>
  ///过滤器,写法是.txt;.abc
  /// </summary>
  private string filter="";
  /// <summary>
  /// 限制文件上传大小,为0是不限制,单位是字节
  /// </summary>
  private int size=0;//System.ComponentModel.DefaultEventAttribute
  
    /// <summary>
    /// 上传事件
    /// </summary>
  [Bindable(true),Category("事件"),Description("上传后激发的事件")
  ]
  public event EventHandler Click;
  /// <summary>
  /// 上传文件数
  /// </summary>
  [Bindable(true),
  Category("参数"),Description("设定上传文件的个数"),
  DefaultValue("1")]
  public int FileNum{
   set{
    if(value<1){
     value=1;
    }
    filenum=value;
    this.Controls.Clear();
    file=new HtmlInputFile[filenum];
    filename=new string[filenum];
    suffix=new string[filenum];
    for(int i=0;i<filenum;i++) {
     file[i]=new HtmlInputFile();
     this.Controls.Add(file[i]);
    }
    this.Controls.Add(button);
   }
   get{
    return filenum;
   }
  }
  /// <summary>
  /// 上传按钮的文本
  /// </summary>
  [Bindable(true),
  Category("参数"), Description("设定上传文件的路径"),
  DefaultValue("1")]
   /// <summary>
   /// 上传路径
   /// </summary>
  public string UploadPath {
   set{
    if("".Equals(value)||value==null){
     value=System.IO.Path.GetTempPath();
    }
    path=value;
   }
   get{
    return path;
   }
  }
  /// <summary>
  /// 得到文件名
  /// </summary>
  public string[] Filename{
   get{
    return filename;
   }
  }
  /// <summary>
  /// 得到后缀
  /// </summary>
  public string[] Suffix{
   get{
    return  suffix;
   }
  }
  /// <summary>
  /// 过滤器
  /// </summary>
  public string Filter{
   set{
    filter=value;
   }
   get{
    return filter;
   }
  }
  /// <summary>
  /// 限制大小
  /// </summary>
  public int FileSize{
   set{
    size=value;
   }
   get{
    return size;
   }
  }
  /// <summary>
  /// 快捷键
  /// </summary>
  public override string AccessKey{
   get{
    return button.AccessKey;
   }
   set{
    button.AccessKey=value;
   }
  }
  /// <summary>
  /// 背景
  /// </summary>
  public override System.Drawing.Color BackColor{
   get{
    return button.BackColor;
   }
   set{
    button.BackColor=value;
   }
  }
  /// <summary>
  /// 边框颜色
  /// </summary>
  public override System.Drawing.Color BorderColor{
   get{
    return button.BorderColor;
   }
   set{
    button.BorderColor=value;
   }
  }
  /// <summary>
  /// 边框风格
  /// </summary>
  public override BorderStyle BorderStyle{
   get{
    return button.BorderStyle;
   }
   set{
    button.BorderStyle=value;
   }
  }
  /// <summary>
  /// 文本
  /// </summary>
  [Bindable(true),
   Category("Appearance"),
   DefaultValue("")]
  public string Text
  {
   get
   {
    return button.Text;
   }
   set
   {
    button.Text = value;
   }
  }
  
  public FileUpload():base(){
   
   FileNum=1;
   button.Click+=new EventHandler(this.button_Click);
   this.Controls.Add(button);
   
  }
  /// <summary>
  /// 按钮事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void button_Click(object sender, EventArgs e){
   Upload();
   ///添加你的代码
   if(Click!=null)
    Click(sender,e);  ///抛处事件
  }
  /// <summary>
  /// 上传
  /// </summary>
  private void Upload(){
   System.Web.HttpPostedFile postedFile;
   for(int i=0;i<filenum;i++){
    try{
     postedFile=file[i].PostedFile;
     if(postedFile!=null) {
      if(postedFile.ContentLength>size && size!=0){
       break;
      }
      string suf=GetSuffix(postedFile.FileName);
      if(filter!=null && filter.IndexOf(suf)>-1){
       break;
      }
      filename[i]=DateTime.Now.Ticks.ToString();
      suffix[i]=suf;
      postedFile.SaveAs(System.IO.Path.Combine(path,filename[i]+suf));
      
     
     }
    }finally{
     filename[i]="";
    }
   }
  }
  /// <summary>
  /// 获取后缀名
  /// </summary>
  /// <param name="filename">文件名</param>
  /// <returns>返回带.的后缀名</returns>
  private string GetSuffix(string filename){
   int index=filename.LastIndexOf(".");
   if(index>0){
    return filename.Substring(index);
   }
   return "";
  }
   
}
}

时间: 2025-01-02 11:09:38

我自己写的自定义Web的上传控件的相关文章

自定义文件上传控件样式-input透明法

自定义文件上传控件样式-input透明法. 作为一个刚入坑不久的程序小白,今天和一个自定义<input type="file">控件的工作斗智斗勇了一上午.通过各种膜拜大神们的资料,总算最后有了一个还算看的过去的解决方案,来记录一下. 页面中,<input type="file">控件的默认显示 在Chrome中是这样: 在IE里是这样: 要如何使它变成下面这样,点击此区域也能上传文件呢? 原理:将input放进一个具有背景的div标签中,并

asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新文件上传控件

ajax|asp.net|控件|上传|上传控件|刷新|无刷新 在做一个信息管理平台时用到了图片,就像做一个上传的正好用的是asp.net ajax就试着做了一个不很好 自定义用户控件文件 PicUpload.ascx 1<%@ control language="C#" autoeventwireup="true" inherits="Admin_PicUpload, App_Web_mboefw14" %>2 <asp:Ima

jQuery文件上传控件 Uploadify 详解_jquery

基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个版本,一个用flash,一个是html5.html5的需要付费~所以这里只说flash版本的用法. 官网:http://www.uploadify.com/ 控件截图: 用法: 首先引用下面的文件 <link rel="stylesheet" type="text/css&

百度多文件异步上传控件webuploader基本用法解析_jquery

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核:  若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"/>  若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp"/>  若页面需默认用ie标准内核

asp..net2.0文档上传 的一个方法(一个上传控件,上传多个文档 )

控件|上传|上传控件  前台 :   <table style="width:100%">         <tr>             <td style="width:15%">                 类型名称:</td>             <td>                <asp:DropDownList ID="TypeDDL" runat=&q

ploadify上传控件问题-.NET页面多个Uploadify上传控件,上传失败!

问题描述 .NET页面多个Uploadify上传控件,上传失败! 今天遇到一个很棘手的问题,我一个页面中加了四个Uploadify上传控件.但是点击浏览按钮时选择文件后之后排在最后一个的上传控件可以正常上传文件.其他几个上传控件都选择文件之后均没有反应!也没有报什么js错误,不知道什么原因,有遇到类似此类问题的同行吗?急等大家的指点!!! 解决方案 用fiddler调试下,有没有上传的数据产生,表单名字是什么,等等,看看你是不是脚本写错了.

asp.net silverlight批量上传控件实现方法

    /// <summary>     /// 文件的状态     /// </summary>     internal enum filestatus     {         /// <summary>         /// 准备就绪,等待上传         /// </summary>         ready = 0,         /// <summary>         /// 正在上传中         /// &

基于jquery跨浏览器显示的file上传控件_jquery

前面我写过一篇短小的文章,简要的介绍了下怎样定义input type="file" 的样式.对于一般的表单,上传控件较少,这样的做法确实不错,既减少了代码,又美化了样式,原文:<定义input type="file" 的样式> 其实要实现给file控件定义样式,大致思想都是一样的. 今天看到博客园的繁花连写两篇文章来研究file控件 <jquery.fileEveryWhere.js--一个跨浏览器的file显示插件> <firefox

upload-做一个基于jquery 的上传控件

问题描述 做一个基于jquery 的上传控件 我是新手,我想做一个基于jquery upload的上传控件需要从哪方面考虑?谢谢 解决方案 很多居于jquery的上传插件,如ajaxfileupload,jquery.form.js,uploadify等..自己找下API看 http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.htmlhttp://plugins.jquery.com/form/ 解决方案二: http://ww