Winform快速开发框架之存储图片资源解决方案|C/S框架网
Winform快速开发框架之存储图片资源解决方案|C/S框架网
我们在开发大型软件系统时,经常会遇到存储图片资源的需求,终端用户需要提交本地图片到应用服务器或数据库服务器。有些用户将图片资源存储在当前业务表(添加图片字段,与业务数据同级提交),这种做法将给软件系统带来很大麻烦,如:查询时系统响应慢、程序固化、不利于维护和扩展。
本文作者曾使用以下几种图片存储策略:
1. 存在独立的资料表(如:dt_Image),与系统结合紧密度最高,实现最简单。
2. 访问IIS服务器,使用URL方式访问图片,需要部署IIS服务器,客户端要能访问IIS服务器。
3. 本机缓存机制+在线单个图片动态获取。
4. FTP服务器,阿里OSS存储等。
使用独立图片表存储图片资源有以下优势:
1.图片资源与业务数据完全分离。
2.图片资源可以跨服务器部署、可扩展支持其它图片存储策略。
3.与系统结合紧密度最高,实现简单,代码复用。
4.易维护性。
本文将阐述在VS开发环境下使用ADO.NET组件+标准三层逻辑架构独立存储图片解决方案,与表格中展示图片资源略有不同,图片组件是VS自带的PictureEdit,在界面中固定图片尺寸和组件数量,而不是表格中ColumnEdit绑定RepositoryItemPictureEdit组件。
本文示例采用继承frmBaseDataDictionary基类的数据字段窗体,图片表作为当前记录的明细表。
界面效果图:
部分源码参考:
C# Code:
//数据采集-创建用于保存的数据集
private DataSet CreateSaveData()
{
_BLLInstance.DataBinderRow.EndEdit();
DataSet ds = new DataSet();
//收集主表
ds.Tables.Add(_BLLInstance.DataBinder.Copy());
//收集图片明细表
DataTable dtImg = _BLLIMG.GetImageDataRow("-");
AddImage(dtImg, pic1);
AddImage(dtImg, pic2);
AddImage(dtImg, pic3);
if (dtImg.Rows.Count > 0)
ds.Tables.Add(dtImg.Copy());
return ds;
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
//数据采集-创建用于保存的数据集
private DataSet CreateSaveData()
{
_BLLInstance.DataBinderRow.EndEdit();
DataSet ds = new DataSet();
//收集主表
ds.Tables.Add(_BLLInstance.DataBinder.Copy());
//收集图片明细表
DataTable dtImg = _BLLIMG.GetImageDataRow("-");
AddImage(dtImg, pic1);
AddImage(dtImg, pic2);
AddImage(dtImg, pic3);
if (dtImg.Rows.Count > 0)
ds.Tables.Add(dtImg.Copy());
return ds;
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
C# Code:
//从剪贴板粘贴图片
private void menuPOP_Paster_Click(object sender, EventArgs e)
{
if (_CurrentImage != null)
{
Image img = Clipboard.GetImage();
if (img != null) this.SetImage(_CurrentImage, img);
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
//从剪贴板粘贴图片
private void menuPOP_Paster_Click(object sender, EventArgs e)
{
if (_CurrentImage != null)
{
Image img = Clipboard.GetImage();
if (img != null) this.SetImage(_CurrentImage, img);
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
C# Code:
//删除图片
private void menuPOP_Del_Click(object sender, EventArgs e)
{
if (_CurrentImage == null || _CurrentImage.Tag == null) return;
if (Msg.AskQuestion("确定要删除图片吗?"))
{
DataRow R = _CurrentImage.Tag as DataRow;
//直接从后台删除
if (R.RowState != DataRowState.Added)
{
string ImgID = R[dt_Image.ImgID].ToString();
if (_BLLIMG.Delete(ImgID))
{
_CurrentImage.Tag = null;
_CurrentImage.Image = null;
Msg.ShowInformation("成功删除图片!");
}
else
Msg.Warning("删除图片失败!");
}
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
//删除图片
private void menuPOP_Del_Click(object sender, EventArgs e)
{
if (_CurrentImage == null || _CurrentImage.Tag == null) return;
if (Msg.AskQuestion("确定要删除图片吗?"))
{
DataRow R = _CurrentImage.Tag as DataRow;
//直接从后台删除
if (R.RowState != DataRowState.Added)
{
string ImgID = R[dt_Image.ImgID].ToString();
if (_BLLIMG.Delete(ImgID))
{
_CurrentImage.Tag = null;
_CurrentImage.Image = null;
Msg.ShowInformation("成功删除图片!");
}
else
Msg.Warning("删除图片失败!");
}
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
相关文档:Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
VIP用户下载源码(源码适用CSFrameworkV4.x企业版,V5.x旗舰版)
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网