开发工具与关键技术:vs
作者:zaizai
撰写时间:2020-08-28
一. 服务端代码
- 在数据库创建好保存的存储语句后来到服务端写保存图片代码。客户端把图片以图片流的形式传输到服务端,服务端创建文件夹来重新保存图片和重命名图片,然后把图片名称保存到数据库。
[OperationContract]//保存新增分店
private int btnSave_Click_Subbranchs(byte[][] bytepicture){
//声明变量接收=>文件名字
string strPatientPhotos = WenJianLiuZhuanHuanLuJing(bytepicture);
SqlParameter[] mySqlParameters ={
//定义传递参数,以及传递参数的类型
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@storeImage",SqlDbType.Char),
};
mySqlParameters[0].Value = "btnSave_Click_Subbranchs";
mySqlParameters[1].Value = strPatientPhotos;
}
//流转文件名
private string WenJianLiuZhuanHuanLuJing(byte[][] byteTuPian)
{
//1、重命名
//2、图片保存到文件夹(判断文件夹存不存在)
//3、返回图片名称
try
{
string strBaoCunLuJing;
//获取基目录,它由程序集冲突解决程序用来探测程序集。
string strPath = System.AppDomain.CurrentDomain.BaseDirectory + "image\\";
//第一步:判断文件夹image
if (!Directory.Exists(strPath))
{
//文件夹不存在:创建文件夹
Directory.CreateDirectory(strPath);
}
//拼接日期
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 System.IO.FileInfo(strBaoCunLuJing);
FileStream fs;
// 创建只写 System.IO.FileStream。
fs = fi.OpenWrite();
//将字节块写入文件流。(数组,开始字节索引,长度)
fs.Write(byteTuPian[i], 0, byteTuPian[i].Length);
//关闭当前流并释放与之关联的所有资源
fs.Close();
strWenJianName = strRiQiWenJian;
}
//返回文件名字
return strWenJianName;
}
catch (Exception)
{
throw null;
}
}
二.客户端代码
首先搭建好页面给个按钮浏览点击事件(btnview_Click)和按钮保存图片事件分别是访问此电脑的本地文件(图片)和保存图片入数据库的方法。声明一个全局的byte数组List<byte[]> lstBytes = new List<byte[]>();
//浏览显示图片
private void btnview_Click(object sender, RoutedEventArgs e)
{
try
{
//声明两个局部变量
Stream phpto = null;
//1.1打开(文件框)
OpenFileDialog ofdWenJian = new OpenFileDialog();
ofdWenJian.Filter = "ALL Image Files|*.*";
if ((bool)ofdWenJian.ShowDialog())
{
//选定的文件(选定的文件打开只读流)
if ((phpto=ofdWenJian.OpenFile())!=null)
{
//获取文件长度(用字节表示的流长度 )
int 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));
//绑定图片
txtTupian.Source = images;//图片绑定
txtstoreImage.Text = ofdWenJian.FileName;//图片名绑定
}
}
else
{
MessageBox.Show("对话框没有显示,没办法选择图片!", "系统提示", MessageBoxButton.OKCancel, MessageBoxImage.Error);
}
}
catch (Exception)
{
MessageBox.Show("绑定图片出错,请重新选择!", "系统提示", MessageBoxButton.OKCancel, MessageBoxImage.Error);
}
}
//删除图片
private void btndelect_Click(object sender, RoutedEventArgs e)
{
lstBytes.Clear();
txtTupian.Source = null;
txtstoreImage.Text = string.Empty;
}
保存图片
private void btnSave_Click(object sender, RoutedEventArgs e){
//提取上传的文件
byte[][] bytepicture = new byte[lstBytes.Count][];
for (int i = 0; i < lstBytes.Count; i++)
{
bytepicture[i] = lstBytes[i];
}
int count = myClient.btnSave_Click_Subbranchs(bytepicture);
if (count>0) {
MessageBoxResult dr = MessageBox.Show("新增图片资料成功!", "系统提醒",
MessageBoxButton.OKCancel, MessageBoxImage.Information); //弹出确定对话框
//关闭当前窗口
if (dr == MessageBoxResult.OK) //如果点了确定按钮
{
//关闭当前窗口
this.Close();
}
}
}
版权声明:本文为weixin_44546554原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。