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旗舰版)
参考文档:
原创Winform布局开源框架,Winform控件框架,插件化框架|C/S框架网
Winform自动升级框架源码(C#.NET)-C/S框架网
Winform查询数据对话窗体与选择资料窗体实现|C/S框架网
C# Winform增删查改快速开发框架|C/S框架网
Winform程序扫码条码读取商品数据简单实现|C/S框架网
Winform界面权限控制原理|C/S框架网
Winform增删查改基础框架|C/S框架网
Winform界面的功能按钮同等权限控制|C/S框架网
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
Winform通用框架(C#.NET)之权限管理系统详细设计|C/S框架网
Winform框架登录界面大全|C/S框架网
Winform界面开发框架之界面展示效果图|C/S框架网
Winform开发框架测试程序之DALFactory类测试|C/S框架网
Winform开发框架测试程序之测试环境配置|C/S框架网
原创文档-Winform开发框架提供通用导入Excel功能界面|C/S框架网
Winform皮肤框架之GridView表格列头右键菜单详解|C/S框架网
原创Winform布局开源框架,Winform控件框架,插件化框架|C/S框架网
Winform自动升级框架源码(C#.NET)-C/S框架网
Winform查询数据对话窗体与选择资料窗体实现|C/S框架网
C# Winform增删查改快速开发框架|C/S框架网
Winform程序扫码条码读取商品数据简单实现|C/S框架网
Winform界面权限控制原理|C/S框架网
Winform增删查改基础框架|C/S框架网
Winform界面的功能按钮同等权限控制|C/S框架网
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
Winform通用框架(C#.NET)之权限管理系统详细设计|C/S框架网
Winform框架登录界面大全|C/S框架网
Winform界面开发框架之界面展示效果图|C/S框架网
Winform开发框架测试程序之DALFactory类测试|C/S框架网
Winform开发框架测试程序之测试环境配置|C/S框架网
原创文档-Winform开发框架提供通用导入Excel功能界面|C/S框架网
Winform皮肤框架之GridView表格列头右键菜单详解|C/S框架网
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服

(VIP会员下载)