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;
}
}
}
代码写完了,就可以实现上传图片到项目了,如图:
一般我们把图片上传到服务端的,同样的把文件流数组传到服务端,服务端处理图片保存在服务端就行了,这里是个简单的上传到客户端的实例;