开发工具与关键技术:Visual Studio
撰写时间:2019年06月28日
在这里我要介绍一下WPF的新增上传图片,它与之前MVC的不太一样,但也只是代码不一样,逻辑和思路还是类似的。
一、先在数据库中写新增的存储过程,这里的新增代码跟以前的新增存储过程一样,新增什么写什么没什么特别的。当然,首先还是要判断需要新增的数据在表中存不存在,存在的不新增,再写需要新增的字段。数据库的存储过程的代码如下:
二、再回到服务端service里编写代码,直接在新增里面获取到数据库的存储过程的代码,图片亦是如此。但是,在新增的时候,我们还需要声明变量来接收图片,所以我们要写两个方法。(注意:这里的图片是byte[]类型)。在服务器service配置好引用,客户端client直接调用
string strPatientPhotos = WenJianLiuZhuanHuanLuJing(bytepicture);
我们需要把文件流转换为路径
private string WenJianLiuZhuanHuanLuJing(byte[][] byteTuPian)
第一步:我们需要判断有没有文件image,如果没有,我们需要创建一个名叫image的文件夹装图片,之后图片的名称需要拼接日期,再遍历二进制的数组。
第二步:如果已经有了文件夹,那么直接返回文件名字
服务器代码如下:
string strWenJianQianZui = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() +DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() +DateTime.Now.Millisecond.ToString();
string strWenJianName = "";
for (int i = 0; i < byteTuPian.Length; i++)
{
string strRiQiWenJian = strWenJianQianZui + i.ToString() + ".png";
strBaoCunLuJing = strPath + strRiQiWenJian;
FileInfo fi = new FileInfo(strBaoCunLuJing);
FileStream fs;
fs = fi.OpenWrite();
fs.Write(byteTuPian[i], 0, byteTuPian[i].Length);
fs.Close();
strWenJianName = strRiQiWenJian;
}
return strWenJianName;
四、最后在客户端client添加服务器service的引用。在页面中,我们有一个浏览图片的按钮,点击可以去文件夹选择图片,选择图片的时候,我们还需要给它筛选文件类型ALL Image Files|.,因为是选择文件,所以我们需要引用IO流,打开只读流,获取文件的流长度,声明一个数组,用数组读取字节数,之后绑定图片`
OpenFileDialog ofdWenJian = new OpenFileDialog();
ofdWenJian.Filter = "ALL Image Files|*.*";
if ((bool)ofdWenJian.ShowDialog())
{
if ((phpto = ofdWenJian.OpenFile()) != null)
{
length = (int)phpto.Length;
byte[] bytes = new byte[length];
phpto.Read(bytes, 0, length);
lstBytes.Add(bytes);
BitmapImage images = new BitmapImage(new Uri(ofdWenJian.FileName));
img_photo.Source = images;
txt_Load.Text = ofdWenJian.FileName;
}
}
五、保存新增的图片,提取刚刚选择的图片
//提取上传的文件
byte[][] bytepicture = new byte[lstBytes.Count][];
for (int i = 0; i < lstBytes.Count; i++)
{
bytepicture[i] = lstBytes[i];//提取图片
}