图片上传/修改的总结
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
图片上传
1.
图片上传,其实本质上就是(文件)上传;
2.
图片上传到数据库的时候,通常不是把图片直接保存到数据库,而是把图片的路径或名称保存到数据库;
3.
虽然数据库中支持把图片直接保存到数据库,但是,并不推荐这样做,因为图片
(二进制)形式的文件直接保存到数据库中,占的内存比较大,数据库加载数据/索引时,速度也会下降;会严重影响程序的运行速度;
4.
一般情况下,都是把图片保存到硬盘上,然后再把图片的路径/名称保存到数据库上;
5.
图片的格式分为5种,例如:.jpeg
/.png /.jpg /.gif /.bmp
6.
Gif格式的图片一般为动态图片;
7.
FileReader();文件读取器
8.
使用文件读取器读取文件时,需要把文件转为URL(Base64);
9.
图片上传时,会转换为Base64编码,其实就是(二进制)文件转Base64编码;
10.
使用jQuery发送FromData数据的方式上传文件时,必须设置
processData: false
告诉jQuery不要去处理发送的数据
contentType: false
告诉jQuery不要去设置Content-Type请求头
11.
且上传图片(文件)时只能使用post提交,不能使用get提交;
12.
图片上传时,发送到后台控制器,是以流的形式发送的;
13.
保存图片到数据库的步骤,如下:
1.获取图片的扩展名称;
String 变量1= System.IO.Path.GetExtension(页面传递的图片名称);
2.拼接要保存的图片(文件)名称;
String 变量2
= DateTime.Now.ToString("yyyyMMddHHmmssffff") + "_" +
Guid.NewGuid() + 变量1;
3.拼接文件保存的路径;
String 变量3= Server.MapPath("~/Document/userPicture/") + 变量2;
4.保存上传的图片(文件)到硬盘;
userPicture.SaveAs(变量3);
5.文件名称保存到user对象;
user.picture = 变量2;
修改图片
1.
使用jQuery提交图片的时候,无论是上传图片还是修改图片,都不能直接使用
jQuery已经封装好的post提交,因为无法提交上去,必须使用jQuery的FromData提交,或者使用原生的js提交方式;
2.
修改图片的步骤:
第一步:回填图片,并获取页面上的图片;
1.拼接图片的路径;
var 路径名 = "@Url.Content("~/Document/userPicture/")" +
jsonData.picture;
2.修改图片(src)的路径;
$("#ID选择器").attr("src", 路径名);
3.获取回填成功的图片
var 变量1 = $("#id选择器 ").get(0).files[0];
注:这里不能使用Value获取值,获取图片只能使用files[索引];
3.
后台控制器的操作:
第二步:查询出旧的图片名称
Single()查询一条数据;
第三步:获取新上传的图片名称,并保存;
5.获取新图片的扩展名称;
String 变量1= System.IO.Path.GetExtension(页面传递的新图片名称);
6.拼接要保存的新图片(文件)名称;
String 变量2
= DateTime.Now.ToString("yyyyMMddHHmmssffff") + "_" +
Guid.NewGuid() + 变量1;
7.拼接文件保存的新路径;
String 变量3= Server.MapPath("~/Document/userPicture/") + 变量2;
8.保存新上传的图片(文件)到硬盘;
userPicture.SaveAs(变量3);
9.文件名称保存到user对象;
user.picture = 变量2;
第四步:把查询出来的原来旧图片删除掉;
10.拼接旧图片的路径;
string 旧路径名 = Server.MapPath("~/Document/userPicture/") + 旧图片名;
11.最后删除原来图片的旧路径,并保存修改即可;
System.IO.File.Delete(旧路径名);
4. 删除图片的步骤就是以上内容的第4.10.11条方法;
同样是需要先查询出旧的图片,然后拼接路径,再删除路径;
5.其实修改图片,就是结合了图片上传(保存)和删除图片的方法;