MVC图片上传

图片上传

由于一般不会把图片插到数据库中,也不会把图片保存到数据库中,只是把图片的路径保存到数据库,虽然数据库支持图片的二进制保存,但是基本上不会直接存放图片,因为图片所占的内存基本在100k以上,若是需要保存几百张图片进数据库,会导致数据库体积庞大,索引速度下降(查询速度,排序等等的速度下降),严重影响到程序的运行性能。
所以一般是把图片(文件)保存到硬盘上,然后把其名称(或者路径)保存到数据库中。

 

注意:文件上传时只能使用 post提交,不能使用 get提交,因为文件超出get的大小,会把get截断,导致无法提交

 

因图片属于文件类型,所以需要使用文件读取器。

而文件读取器的onload事件在读取文件完成后触发

图片上传时,可以使用正则表达式,限制读取文件的格式

/^(?:image\/bmp|image\/gif|image\/jpg|image\/png|image\/jpeg)$/i

 

图片显示步骤:

双击触发文件输入框点击事件

获取文件输入框里面的文件

使用文件读取器读取文件,并把文件转为URL(Base64编码)

触发onload事件,获取读取后的编码结果,把结果设置给图片的src后,就可以把图片显示出来,当然显示出来的图片并没有到服务器、数据库中

上传:

检查存放图片的目录是否存在,没有就创建一个存放图片的目录

判断是否上传了图片

获取文件的扩展名称,拼接要保存的文件名称,拼接文件的保存路径(并不会保存完整的路径,只会保存相对路径)

保存上传的文件到硬盘

再保存到数据库中

 

而图片修改,就比图片上传多出一个删除旧图片的操作。

如图:

 

 

 

其它重要知识点

(1)重定向:

(2)为了避免项目登录主页面后停止调试,再重新启动后刷新出现主页面嵌套主页面的情况,一般会在登录页面加上:

 

(3)

一、连表查询  join tab被连接表 in model.表名 on 连接表.外键/主键/外键 equals tab被连接表.主键/外键/外键

二、linq 单表查询的写法

(from 自定义的表名 in Model对象.查询的表

where 自定义的表名.字段1 关系运算符 值 

自定义的表名.字段2 关系运算符 值

orderby 自定义的表名.字段

select 自定义的表名

select new {[属性名1= ]自定义的表名.字段1,

          [属性名2= ]自定义的表名.字段2,

          [属性名3= ]自定义的表名.字段3,

          ....

}

select 类名{ 类的属性1=自定义的表名.字段1,

             类的属性2=自定义的表名.字段2,

              ....

}).Single();//查询单条数据,当没有数据或者有多条数据时会触发异常

.SingleOrDefault();//查询单条数据,当没有数据返回默认值(对象的默认值为null);当有多条数据时触发异常

.ToList();//查询多条数据并转为List

.Count();//查询有多少条数据

 

(4)验证码是由代码自动生成,并不是某张静态图片

所以在刷新图片时,为了避免浏览器缓存图片,通常会加上一个参数

如图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值