4月的时候公司比较闲,就想着自己做点东西,其实主要是为了更加熟悉.Net,毕竟接触的时间不长,趁着有时间想提高提高。不过当我做到图片上传这个功能的时候,就有些停滞不前了,连续写了两天也达不到自己想要的标准。后来公司来活,然后就没有然后了,然而做事总不能半途而废吧~时隔一个多月,趁着这个周末,我再次拾起了这个项目,而首要工作就是攻破这个图片上传控件。
下面说说我的标准是什么子的吧~
1、最多可以上传三张图片,超过三张有提示。
2、点击图片小图,有图片放大功能,再次点击,图片恢复原来尺寸。
3、在图片数量范围内,可对图片任意添加,Delete。
看似都是很普通的功能吧,确实如此,只是对.Net自带的FileUpload进行了小小的扩展。不过我就是在第3条上遇到了问题,主要还是对页面刷新机制不了解和没有确定好实现的方法以及不太熟悉自定义控件,不过现在问题都解决了。在给大伙儿说说实现方法之前,先看看效果,没有美化,单看功能。
1、初始状态
2、选择文件
3、上传图片
4、查看图片
5、Delete图片
6、重新添加
7、提示情况
Html代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<
div
>
<
asp:FileUpload
ID
=
"fuImage"
runat
=
"server"
/>
</
div
>
<
div
>
<
asp:Button
ID
=
"btnUpload"
runat
=
"server"
Text
=
"上传"
onclick
=
"btnUpload_Click"
/>
</
div
>
<
div
class
=
"img_label"
>
<
asp:Image
ID
=
"imgUploadImage1"
Visible
=
"false"
runat
=
"server"
style
=
"height:20px;width:20px"
/>
<
asp:Button
ID
=
"button_ImgDelete1"
runat
=
"server"
Text
=
"***"
onclick
=
"button_ImgDelete1_Click"
Visible
=
"false"
/>
<
asp:Image
ID
=
"imgUploadImage2"
Visible
=
"false"
runat
=
"server"
style
=
"height:20px;width:20px"
/>
<
asp:Button
ID
=
"button_ImgDelete2"
runat
=
"server"
Text
=
"***"
onclick
=
"button_ImgDelete2_Click"
Visible
=
"false"
/>
<
asp:Image
ID
=
"imgUploadImage3"
Visible
=
"false"
runat
=
"server"
style
=
"height:20px;width:20px"
/>
<
asp:Button
ID
=
"button_ImgDelete3"
runat
=
"server"
Text
=
"***"
onclick
=
"button_ImgDelete3_Click"
Visible
=
"false"
/>
</
div
>
<
div
id
=
"outerDiv"
style
=
"position:fixed;top:0;left:0;background:rgba(0,0,0,0.7);z-index:2;width:100%;height:100%;display:none;"
>
<
div
id
=
"innerDiv"
style
=
"position:absolute;"
>
<
img
id
=
"bigImg"
style
=
"border:5px solid #fff;"
src
=
""
/>
</
div
>
</
div
>
|
Js代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
$(
function
() {
/*
* 针对上传文件按钮选择完文件判断是否选择合法文件
*/
$(
"input[type=file]"
).change(
function
() {
var
fileName = $(
this
).val();
var
suffixRegExp = /\.jpg$|\.jpeg$|\.gif$|\.png$/i;
if
(suffixRegExp.test(fileName)) {
$(
this
).next(
"img"
).attr(
"src"
, fileName);
}
else
{
$(
this
).val(
""
);
alert(
"允许上传图片格式:GIF|JPG|GIF|."
);
}
});
/*
* 点击图片可以放大进行图片预览,再点击恢复
*/
$(
"img[id*=UploadImage]"
).click(
function
() {
$(
"#bigImg"
).attr(
"src"
, $(
this
).attr(
"src"
)).load(
function
() {
var
windowW = $(window).width();
var
windowH = $(window).height();
var
realWidth =
this
.width;
var
realHeight =
this
.height;
var
imgWidth, imgHeight, scale = 0.8;
if
(realHeight > windowH * scale) {
imgHeight = windowH * scale;
imgWidth = imgHeight / realHeight * realWidth;
if
(imgWidth > windowW * scale) {
imgWidth = windowW * scale;
}
}
else
if
(realWidth > windowW * scale) {
imgWidth = windowW * scale;
imgHeight = imgWidth / realWidth * realHeight;
}
else
{
imgWidth = realWidth;
imgHeight = realHeight;
}
$(
this
).width(imgWidth);
$(
this
).height(imgHeight);
var
w = (windowW - imgWidth) / 2;
var
h = (windowH - imgHeight) / 2;
$(
"#innerDiv"
).css({
"top"
: h,
"left"
: w });
$(
"#outerDiv"
).fadeIn(
"fast"
);
});
});
/*
* 再次点击放大的图层,使图层消失
*/
$(
"#outerDiv"
).click(
function
() {
$(
this
).fadeOut(
"fast"
);
})
/*
* 点击上传按钮之前需要先判断是否选择了图片,如果选择的图片数量大于3,提示不能继续添加
*/
$(btn_UploadImage).click(
function
() {
var
count = 0;
$(
"div.img_label img[src*=Upload]"
).each(
function
() {
if
($(
this
).attr(
"src"
) !=
null
) {
count++;
}
})
if
(count == 3) {
alert(
"最多添加3张图片,如想继续添加,请先***图片"
);
return
false
;
}
})
}
|
C#代码:
怎么说呢?最初想的是用jQuery实现Delete这块的功能,Delete图片的思路其实就是给img的src属性赋空值,然后将其隐藏掉,但是不知道为什么当再次点击【上传】按钮的时候,后台又可以获取到删掉了的图片src属性的先前的值,这是让我百思不得其解的地方。不过有时候问题总会有那么一个点,很简单但是又很难让人注意到,我本来就是在后台靠判断img的url有无值,然后再给其赋值的,那么我Delete的时候就可以直接给想Delete的img赋空值啊,何必用jQuery呢?不知道我说的大伙儿能不能懂,就是当时的一个想法,结果导致迟迟解决不了这个问题。
另外想说说关于.Net自定义控件,感觉真的蛮实用的,其实我们在写的时候就把其当成普通控件就好,可以给其加一些控件属性,而这些控件属性其实就是这个自定义控件类的属性(成员参数)了,当然,我们还可以把它纯当作一个类,比如有数据库交互的时候,我们就可以在其内部写一个公开的Save方法,将控件内部的数据单独保存起来,当整个页面Save的时候,我们只要在适当的位置调用一个自定义控件的Save方法就OK了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
public
partial
class
ImageUploadControl : System.Web.UI.UserControl
{
private
string
_relativePath;
private
string
_value =
"$$##"
;
public
string
Value
{
get
{
return
_value; }
set
{ _value = value; }
}
private
BmsContextDataContext bcDataCXD =
new
BmsContextDataContext();
private
bool
flag =
false
;
//点击上传按钮时,如果给Image赋值,flag置true,说明此次上传结束,上传按钮点击一次只能给一个Image赋值
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
Init();
}
}
public
void
Init()
{
if
(!
string
.IsNullOrEmpty(_value))
{
string
[] sep = {
"$$##"
};
string
[] imgList = _value.Split(sep, StringSplitOptions.RemoveEmptyEntries);
foreach
(
string
img
in
imgList)
{
if
(
string
.IsNullOrEmpty(imgUploadImage1.ImageUrl))
{
imgUploadImage1.ImageUrl = img;
imgUploadImage1.Visible =
true
;
button_ImgDelete1.Visible =
true
;
}
else
if
(
string
.IsNullOrEmpty(imgUploadImage2.ImageUrl))
{
imgUploadImage2.ImageUrl = img;
imgUploadImage2.Visible =
true
;
button_ImgDelete2.Visible =
true
;
}
else
if
(
string
.IsNullOrEmpty(imgUploadImage3.ImageUrl))
{
imgUploadImage3.ImageUrl = img;
imgUploadImage3.Visible =
true
;
button_ImgDelete3.Visible =
true
;
}
}
}
}
public
void
Save()
{
_value =
"$$##"
;
if
(!
string
.IsNullOrEmpty(imgUploadImage1.ImageUrl))
{
_value = _value + imgUploadImage1.ImageUrl +
"$$##"
;
}
if
(!
string
.IsNullOrEmpty(imgUploadImage2.ImageUrl))
{
_value = _value + imgUploadImage2.ImageUrl +
"$$##"
;
}
if
(!
string
.IsNullOrEmpty(imgUploadImage3.ImageUrl))
{
_value = _value + imgUploadImage3.ImageUrl +
"$$##"
;
}
}
|