通过继承HtmlInputFile控件,制作一个专门用于图片上传的控件。此控件可以限制上传图片的大小,并限制了只能上传图片格式的文件。
控件的原理是这样的:当控件选择文件时,关联的Img控件获得src并加载,加载完后得到文件的大小,并传给控件属性。
代码如下:
在客户端只需设定控件的MaxSize就可以了,然后在提交前通过控件的checkSize属性获知图片是否通过(Javascript)。
不知上传其他文件格式的文件如何获得文件的大小,希望大家给点意见。
控件的原理是这样的:当控件选择文件时,关联的Img控件获得src并加载,加载完后得到文件的大小,并传给控件属性。
代码如下:
1
using System;
2
using System.Drawing;
3
using System.Drawing.Design;
4
using System.Web.UI;
5
using System.Web.UI.HtmlControls;
6
using System.Web.UI.WebControls;
7
using System.ComponentModel;
8
using System.ComponentModel.Design;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
namespace FaibClass.WebControls
11
{
12
[ToolboxData("<{0}:ImageUploader runat=server></{0}:ImageUploader>")]
13
public class ImageUploader : HtmlInputFile
14
{
15
private int m_MaxSize = -1;
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
public ImageUploader()
18
{
19
}
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
[Category("Appearance")]
22
[DefaultValue(-1)]
23
[Description("限制上传的图片大小。")]
24
public int MaxSize
25
{
26
get{return m_MaxSize;}
27
set{m_MaxSize = value;}
28
}
29![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
protected override void OnPreRender(EventArgs e)
31
{
32
base.OnPreRender (e);
33
输出脚本
64![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
//控件的内容改变时
66
this.Attributes.Add("onpropertychange", "if(event.propertyName == 'value')FileUpload_SetSrc()");
67
//添加文件大小属性
68
this.Attributes.Add("fileSize", "0");
69
//添加是否通过属性
70
this.Attributes.Add("checkSize", "0");
71
//添加文件最大大小属性
72
this.Attributes.Add("maxSize", m_MaxSize.ToString());
73
}
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
protected override void Render(System.Web.UI.HtmlTextWriter writer)
76
{
77
base.Render (writer);
78
//关联的上传控件域
79
writer.AddAttribute("uploadObject", this.ClientID);
80
//图片加载后获得图片大小
81
writer.AddAttribute("onpropertychange", "if(event.propertyName == 'src')FileUpload_GetSize()");
82
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_img");
83
writer.AddStyleAttribute("display", "block");
84
writer.AddStyleAttribute("display", "none");
85
writer.RenderBeginTag(HtmlTextWriterTag.Img);
86
writer.RenderEndTag();
87
}
88
}
89
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
在客户端只需设定控件的MaxSize就可以了,然后在提交前通过控件的checkSize属性获知图片是否通过(Javascript)。
不知上传其他文件格式的文件如何获得文件的大小,希望大家给点意见。