WPF图片上传到客户端

WPF图片上传到客户端

WPF图片上传是通过C#代码实现的,通过将文件流转换成字符串(路径)存放在项目中;下面是一个简单实例,首先我创建好一个页面用于操作文件,代码如下;

<Window x:Class="Wpf_Client.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Title="登录" 
        Height="300"
        Width="300" 
        Background="LightBlue" WindowStartupLocation="CenterScreen"
        ResizeMode="NoResize">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*"></RowDefinition>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="7*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"></ColumnDefinition>
            <ColumnDefinition Width="4*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Textbook Grid.Column="0" Text="文件名:" LineHeight="auto" FontSize="15"></TextBlock>
        <TextBox x:Name="paths" Grid.Column="1"></TextBox>
        <StackPanel Grid.ColumnSpan="2" Grid.Row="1" Orientation="Horizontal">
            <Button Width="80" Margin="10,0" Content="浏览图片" x:Name="open" Click="open_Click"></Button>
            <Button Width="80"  Margin="10,0" Content="清空图片" x:Name="empty" Click="empty_Click"></Button>
            <Button Width="80"  Margin="10,0" Content="上传图片" x:Name="Upload" Click="Upload_Click"></Button>
        </StackPanel>
        <Image x:Name="photos_show" Grid.Row="2" Grid.ColumnSpan="2"></Image>
    </Grid>
</Window>
  

写好页面后就要写后台代码了,代如下;

//声明一个表格接受(多张)图片
  List<byte[]> lstBytes = new List<byte[]>();
 //浏览图片
  private void open_Click(object sender, RoutedEventArgs e)
        {
            //定义文件流
            Stream photo = null;
            //声明文件长度
            int Length = 0;
            //(实例化)打开文件筐
            OpenFileDialog ofdWenJian = new OpenFileDialog();
            //允许上传多张图片
            ofdWenJian.Multiselect = false;
            //筛选文件类型
            ofdWenJian.Filter= "All Image Files|*.*";
            //显示对话框
            if ((bool)ofdWenJian.ShowDialog())
            {
                //选定文件(选定文件)
                if ((photo = ofdWenJian.OpenFile()) != null)
                {
                    //获取文件长度
                    Length = (int)photo.Length;
                    //声明数组
                    byte[] bytes = new byte[Length];
                    //读取文件(字节数组,从零开始的字节偏移量)
                    photo.Read(bytes, 0, Length);
                    //把图片添加到表格
                    lstBytes.Add(bytes);
                    //提供可扩展性XAML语言,用于显示图片
                    BitmapImage images = new BitmapImage(new Uri(ofdWenJian.FileName));
                    //绑定图片
                    photos_show.Source = images;
                    //显示路径
paths.Text = ofdWenJian.FileName;
                }
            }
        }
 //清空图片
   private void empty_Click(object sender, RoutedEventArgs e)
        {
            //清空元素
            lstBytes.Clear();
            //情空图片
            photos_show.Source = null;
            //清空文件名
            paths.Text = string.Empty;
        }
    //上传图片
        private void Upload_Click(object sender, RoutedEventArgs e)
        {
             //实例化上传文件类
            Wpf_Client.UploadPicture myUploadPicture = new UploadPicture();
            //声明一个二维数组接受刚刚上面选的图片
            byte[][] bytepicture = new byte[lstBytes.Count][];
            for (int i = 0; i < lstBytes.Count; i++)
            {
                bytepicture[i] = lstBytes[i];
            } 
            //调用上传文件类里封装的文件转换成路径的方法保存文件
            myUploadPicture.WenJianLiuZhuanHuanLuJing(bytepicture);
        }

在此之前要先创建好一个上传图片的类,如图所示

 class UploadPicture
    {
        public string WenJianLiuZhuanHuanLuJing(byte[][] byteTuPian)
        {
            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 (var i = 0; i < byteTuPian.Length; i++)
                {
                    //文件命名:日期+后缀
                    string strRiQiWenJian = strWenJianQianZui + i.ToString() + ".png";


                    //拼接路径
                    strBaoCunLuJing = strPath + strRiQiWenJian;
                    strWenJianName = strBaoCunLuJing + "image\\" + strRiQiWenJian;
                    FileInfo fi = new System.IO.FileInfo(strBaoCunLuJing);
                    FileStream fs;
                    //创建只写的FileStream
                    fs = fi.OpenWrite();
                    //将字节块写入文件流。(数组,开始字节索引,长度)
                    fs.Write(byteTuPian[i], 0, byteTuPian[i].Length);
                    //关闭当前流并释放与之关联的所有资源
                    fs.Close();
                    strWenJianName = strRiQiWenJian;

                }
                return strWenJianName;

            }
            catch (Exception)
            {

                return null;
            }
        }
    }

代码写完了,就可以实现上传图片到项目了,如图:

在这里插入图片描述
在这里插入图片描述
一般我们把图片上传到服务端的,同样的把文件流数组传到服务端,服务端处理图片保存在服务端就行了,这里是个简单的上传到客户端的实例;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值