C#实现winform下图片的上传预览保存以及在桌面应用系统的应用
图片的上传、预览、保存操作在许多应用系统中经常需要用到,比如员工的头像即为一个典型的案例。在很多应用系统中,比如C#的B/S、C/S系统,Java开发的B/S、C/S系统等等,都无疑会涉及到
“图片或者文档”之类的“文件”的管理操作。
开发了一套企业使用的工资管理系统,其中涉及到员工的图片以及附件的管理。为此摒弃了以前“直接将图片的内容,即二进制流存进数据库中”的做法,而是“将实际图片存储在应用程序的某个文件夹下,并将此存储路径存储在数据库表对应的字段中”。
下面以工资管理系统为例,介绍一下C#在winform
C/S桌面应用系统下对于图片的管理操作!而对于采用Java C/S或者B/S的实现,我以前也实现过,比如jsp上传预览保存图片、struts2上传预览保存图片、springMVC上传预览保存图片我都干过,只不过那会要不是简单的demo,自己做着玩,要不就是在公司的项目中使用!总之,这些原理都是不离其宗的,即“数据库存储的是图片的存储路径,图片真正存放的路径是在应用系统的某个文件夹下”,而且,其相应的实现可以在百度一搜即可实现了!!
在C#
winform下,上传预览控件主要采用pitureBox控件和openFileDialog实现,其中,pitureBox用于显示图片,openFileDialog用于上传图片到pitureBox控件中进行预览!主要界面和代码如下:
http://img.blog.csdn.net/20160704223012358?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
“上传相片”的事件代码:
-
//上传相片
-
private void buttonUpLoadImage_Click(object sender, EventArgs e)
-
{
-
try
-
{
-
openFileDialogEmpImage.Filter = "*.jpg|*.jpg|*.png|*.png|*.bmp|*.bmp|*.tiff|*.tiff";//图片格式
-
if (openFileDialogEmpImage.ShowDialog() == DialogResult.OK)
-
{
-
isUpLoadPicture = true;//记录是否上传了相片,用于后面保存操作使用:是一个成员变量
-
try
-
{
-
empUpLoadPictureRealPos = openFileDialogEmpImage.FileName;//实际的文件路径+文件名
-
String[] empImageData = empUpLoadPictureRealPos.Split('.');
-
//empImageData[1]:是上传的图片的后缀名
-
empUpLoadPictureFormat = empImageData[1];
-
PictureBoxYuanGongXiangPian.Image = Image.FromFile(empUpLoadPictureRealPos);//将图片显示在pitureBox控件中
-
}
-
catch
-
{
-
MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
-
}
-
}
-
}
-
catch (System.Exception ex)
-
{
-
MessageBox.Show("上传相片出错: " + ex.Message);
-
}
-
}
之后是保存相片的操作,这才是重点!在我自主开发的工资管理系统中,我将图片存储在项目启动路径(即bin目录下)下面的images文件夹下!如下图所示:
http://img.blog.csdn.net/20160704223815447?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
之后是保存图片的操作:
-
"font-size:14px;"> String empImageName = "";
-
//开始保存:需要根据是否上传了员工相片保存员工相片
-
if (isUpLoadPicture == true)
-
{
-
//说明上传了相片
-
-
//设置员工相片的名字:以系统当前时间来命名:其中cmmUtils工具类在前几篇博文已经给出源代码
-
empImageName = cmmUtils.getSystemCurrentTime() + "." + empUpLoadPictureFormat;
-
-
//存储员工相片的实际路径
-
String empImgStoreDestPath = employeeService.setEmpImageRealStoreLocation(empImageName);
-
cmmUtils.stoteImage(empUpLoadPictureRealPos, empImgStoreDestPath);//将图片移动到目标位置,实现图片的真正保存!
-
}
-
else
-
{
-
//没有上传相片
-
empImageName = "default.jpg";
-
}
下面是整体的实现效果!
http://img.blog.csdn.net/20160704224728046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
点击保存,发生的事件以及结果:
http://img.blog.csdn.net/20160704224959844?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
点击下一页 或者
输入“多”进行查询,都可以得到下面的效果:
http://img.blog.csdn.net/20160704225111861?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
而右下角,则是采用pitureBox显示:单击dataGridView列表中某一行的数据时显示该条数据的信息!最后介绍一下如何将该图片从“实际的文件夹下加载到pitureBox控件中”:
主要是这个方法起作用
-
///
-
/// 读取员工相片
-
///
-
/// 数据库存储的员工的相片名:imagePosition
-
/// pitureBox控件名称
-
public void readEmpImage(String empImageName, PictureBox myImage)
-
{
-
String imageLocation = Application.StartupPath.ToString() + "\\images\\employee\";//这个就是上文介绍的图片实际存储的文件夹路径
-
try
-
{
-
String imageRealPath = imageLocation + empImageName;
-
myImage.Image = Image.FromFile(imageRealPath);
-
}
-
catch (System.Exception ex)
-
{
-
String imageRealPath = imageLocation + "default.jpg";
-
myImage.Image = Image.FromFile(imageRealPath);
-
Console.WriteLine("读取员工相片发生异常: " + ex.Message);
-
}
-
}
好了,关于图片在应用系统的上传预览保存操作就介绍到这里了!欢迎留言交流后者加QQ交流!后期会采用同样的道理实现工资管理系统中员工的附件的上传查看以及修改保存管理,敬请期待!
下一博文,将介绍工资管理系统中的员工管理模块
!
加载中,请稍候......