WPF图片上传和保存入数据库

开发工具与关键技术:vs
作者:zaizai
撰写时间:2020-08-28

一. 服务端代码

  1. 在数据库创建好保存的存储语句后来到服务端写保存图片代码。客户端把图片以图片流的形式传输到服务端,服务端创建文件夹来重新保存图片和重命名图片,然后把图片名称保存到数据库。
[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版权协议,转载请附上原文出处链接和本声明。