通常情况下上传图片后有两种保存方式:一是直接将图片保存至数据库;二是将图片保存在服务器的Image文件夹下,而将图片的路径保存在数据库中。两者各有各的好处,但通常情况下建议使用第二种方法。下面将这两种方法简单的说一下。
WPF客户端:
连接WCF服务,将图片转换为FileStream流,再将FileStream流以byte[]方式进行图片上传!
#region 文件流转换路径
private string WenJianLiuZhuanHuanLuJing(byte[][] byteTuPian)
{
try
{
//拼接日期
string strWenJianQianZhui = 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 = string.Empty;
//遍历二进制的数组的数组
for (int i = 0; i < byteTuPian.Length; i++)
{
string strRiQiWenJian = strWenJianQianZhui + i.ToString() + ".png";
//获取基目录,它由程序集冲突解决程序用来探测程序集。
string strBaoCunLuJing = System.AppDomain.CurrentDomain.BaseDirectory;
//拼接路径
strBaoCunLuJing = strBaoCunLuJing + "image\\" + strRiQiWenJian;
FileInfo fi = new System.IO.FileInfo(strBaoCunLuJing);
FileStream fs;
fs = fi.OpenWrite();
//将字节块写入文件流。(数组,开始字节索引,长度)
fs.Write(byteTuPian[i], 0, byteTuPian[i].Length);
//关闭当前流并释放与之关联的所有资源
fs.Close();
strWenJianName = strRiQiWenJian;
}
return strWenJianName;
}
catch
{
return null;
}
}
#endregion
WCF服务端:
以IIS为宿主,Http协议实现接收客户端的byte[]数据,返回给WPF客户端!
服务端Web.config配置十分重要,要做到大图片数据传输,需要给在binding添加
system.web节点下添加
<system.web>
</system.web>
#region 图片上传
public string UserControl_Loaded_SelectPhoro(string strLuJing)
{
return LuJingZhuanHuanWenJianLiu(strLuJing);
}
#endregion
#region 路径转换文件流
private string LuJingZhuanHuanWenJianLiu(string strLuJing)
{
try
{
string strPhotoLuJing = "";
if (strLuJing != "")
{
//得到服务端所在位置的应用程序集
string strSaveLuJing = AppDomain.CurrentDomain.BaseDirectory;
//获取图片路径
strPhotoLuJing = strSaveLuJing + "image\\" + strLuJing;
}
return strPhotoLuJing;
}
catch
{
return null;
}
}