文献种类:专题技术总结文献;
开发工具与关键技术:MVC与 C#
作者: 翁一凯 ;年级: 1903 ;撰写时间:2020 年 月 8 日
图片(文件)上传
开发工具与关键技术:VS MVC(Microsoft Visual Studio) C# DW SQL
作者:翁一凯
撰写时间:2020年8月8日
图片(文件)上传
1.在数据库(表-S_User)中添加一个 picture 字段 nvarchar():数据类型
如下图:
2.前台页面:
①绑定 οndblclick="" :双击事件
文件选择控件 隐藏 file:文件类型 accept:筛选文件类型,否则显示所有的文件
accept:筛选文件类型(不是强制),否则显示所有的文件
②FileReader:文件读取器
读取图片文件,用正则表达式过滤文件:
regexImageFilter=/^(?:image/bmp|image/gif|image/jpg|image/jpeg|image/png)
/
i
;
③
文
件
读
取
器
o
n
l
o
a
d
事
件
在
读
文
件
完
成
后
触
发
,
双
击
图
片
触
发
文
件
输
入
框
的
点
击
事
件
,
读
取
照
片
.
再
获
取
文
件
输
入
框
里
面
的
文
件
,
判
断
读
取
的
文
件
是
否
是
需
要
的
文
件
类
型
,
最
后
使
用
文
件
读
取
器
读
取
文
件
,
并
把
文
件
转
为
U
R
L
(
B
a
s
e
64
编
码
)
i
m
a
g
e
R
e
a
d
e
r
.
r
e
a
d
A
s
D
a
t
a
U
R
L
(
f
i
l
e
)
;
因
为
图
片
是
通
过
U
R
L
传
出
来
显
示
(
这
个
u
r
l
和
常
规
理
解
不
一
样
)
④
t
y
p
e
:
返
回
文
件
的
类
型
m
e
t
h
o
d
:
"
p
o
s
t
"
,
文
件
上
传
时
只
能
使
用
p
o
s
t
提
交
,
不
能
使
用
g
e
t
提
交
p
r
o
c
e
s
s
D
a
t
a
:
f
a
l
s
e
,
告
诉
j
Q
u
e
r
y
不
要
去
处
理
发
送
的
数
据
c
o
n
t
e
n
t
T
y
p
e
:
f
a
l
s
e
,
告
诉
j
Q
u
e
r
y
不
要
去
设
置
C
o
n
t
e
n
t
−
T
y
p
e
请
求
头
⑤
/i; ③文件读取器onload事件在读文件完成后触发,双击图片触发文件输入框的点击事件,读取照片.再获取文件输入框里面的文件 ,判断读取的文件是否是需要的文件类型,最后使用文件读取器读取文件,并把文件转为URL(Base64编码)imageReader.readAsDataURL(file); 因为图片是通过URL传出来显示(这个url和常规理解不一样) ④type:返回文件的类型 method: "post",文件上传时只能使用post提交,不能使用get提交 processData: false, 告诉jQuery不要去处理发送的数据 contentType: false, 告诉jQuery不要去设置Content-Type请求头 ⑤
/i;③文件读取器onload事件在读文件完成后触发,双击图片触发文件输入框的点击事件,读取照片.再获取文件输入框里面的文件,判断读取的文件是否是需要的文件类型,最后使用文件读取器读取文件,并把文件转为URL(Base64编码)imageReader.readAsDataURL(file);因为图片是通过URL传出来显示(这个url和常规理解不一样)④type:返回文件的类型method:"post",文件上传时只能使用post提交,不能使用get提交processData:false,告诉jQuery不要去处理发送的数据contentType:false,告诉jQuery不要去设置Content−Type请求头⑤
- List item
("#userPicture").attr(“src”, “”);//清空图片的预览
$("#frmUser [type=‘reset’]").click();//清空表单
2.后台控制器:
①为什么不放一个二进制类型?
因为图片(文件)占的内存比较大,一般不会直接放到数据库里面去,为了避免数据库体积过 度增长,索引速度变慢,所以把文件保存到硬盘上,然后把文件的名称(路径)保存到数据库.
②保存用户头像(图片)
检查存放用户头像的目录是否存在,没有就创建一个(让它自动创建)
③判断是否上传了图片,获取文件的扩展名称,拼接要保存的文件名称,拼接文件保存的路径,保存上传的文件到硬盘.
③上传成功后记得清空表单