C#对文件图片处理
在已接触过的c#编写.NET应用的程序框架中,我们的MVC和WPF两种分别作用于网页和window应用程序的框架对应有着相应处理文件图片,或者文图并存的文件的上传下载移除等系列操作。本篇就此方面对两种架构的使用方法进行整理归纳总结。
WPF是窗体应用程序,编程过程中VS需要 创建服务端和客户端。服务器与SQL数据库关系更为紧密,用来接收在数据库存储过程中写好的查询新增修改删除的一系列操作所需的数据。客户端代码这边引用客户端以后,主要的就是XAML页面设计和编译功能实现方法。这里我们的中心是对文件图片的处理。在WPF框架中图片在数据库中的存储形式并非通过流转换的一串字符串,而单单只是一个图片文件名。图片直接被保存到项目所在文件夹中。下面部分是保存一个图片的详细步骤。以上课老师讲的火车后台维护系统为例子。客户端在新增员工信息页面定义一个打开对话框浏览添加图片的按钮方法。声明一个新的流变量接收图片,并且声明长度。调用OpenFileDialog方法打开系统文件夹选择。对话框右下角的文件类型选择由ofdWenJian.Filter = "ALL Image Files|*.*"实现;选择完图片就是判断是否读取为空。获取图片长度定义BYTE数组接收文件字节。调用BitmapImage给XAML控件绑定图片数据源显示到页面。
因为数据库中只用保存到图片路径名称即可,所以表中字段类型也是一般的varchar类型。所以需要将图片文件流转换成文件路径名称。我们需要在服务器端写一个转换路径方法。定义接收新的路径字符串变量和一个获取目录,判断文件夹是否存在的路变量。文件路径命名由拼接好的时间+.png后缀组合而成。这里要做的是保存新增好的员工资料,数据库用SQL语言 INSERT...VALUES插入数据,服务器端作为中间层
接收传递数据。接收数据时用到也是byte[][]数组接收图片参数。声明新字符串变量接收刚刚文件转换路径方法的新文件名字。声明好以后给数据库中的varchar类型图片赋值就可直接用到新的路径文件名称。最后一步到客户端的新增保存按钮方法下,同样使用数组提取上传的图片文件,循环遍历提取图片,剩余部分按常规的新增方法写完即可。图片保存成功。
相对于WINDOWS应用程序而言,使用MVC框架的Web网页程序就显得不那么复杂。网页的显示样式设计在视图HTML设计页面搭建。再到后台代码写对应的实现方法,比如这里要说的文件上传,就可以定义一个ULoadWord方法。然后再到HTML页面下方,对应上方法所属的元素控件,使其调用后台方法。HTML中设计页面元素样式,包含在许多元素标签当中。所以想要实现将文件显示到网页上。就需要转换HTML格式文件。转换读取文件的过程中也使用到了正则表达式。用来进行一些细节操作,比如去空格,去掉多余部分,获取标签元素内容,回车换行等等。对应上面WPF选择图片上传为例,MVC这里也演示简单上传图片的操作。定义UpEeditorFile方法中首先选择图片获取名称路径,判断该图片类型,当然不可缺少的步骤就是判断图片文件目录是否存在,不存在就创建,继而保存图片保存该文件路径。还需判断图片是否为指定的图片格式类型。这里举例的是简单的图片上传,没有涉及到对其到数据库的保存。MVC对图片的保存就不仅仅只保存文件名称,而是在保存时定义接收保存图片字符串的列表类。继而存入数据库中
不论是WPF还是MVC在处理图片上传的方法中都少不了使用正则表达式。比如匹配,转义,替换等操作。正则表达式就是记录文本规则的代码。专门用于对字符串的处理。.NET中对正则的使用是存在用专门的类。Regex:正则表达式类,代表了一个不可变的正则表达式。Match:代表了 Regex类的实例的一次匹配结果,可以通过Regex的Match()实例方法返回一个Match的实例。MatchCollection:代 表了Regex类的实例的所有匹配结果,可以通过Regex的Matches()实例方法返回一个MatchCollection的实例。Group: 表示单个捕获组的结果。由于一次匹配可能包含0个、1个或多个分组,所以Match的实例中返回的是捕获组集合的结果,即 GroupCollection。GroupCollection:表示单个匹配中的多个捕获组的集合,可以通过Match的Groups实例属 性返回GroupCollection的实例。Capture:表示单个捕获中的一个子字符串。同Group一样,由于一个捕获中可能包含0个、 1个或多个子字符串,所以Group的实例中返回的是子字符串集合的结果,即CaptureCollection。CaptureCollection: 默认表示按照从里到外、从左到右的顺序由捕获组匹配到的所有子字符串集合,可以通过Group或者Match的Captures实例属性返回 CaptureCollection的实例。注意,可以使用RegexOptions.RightToLeft来改变这种匹配顺序。
RegexOptions: 提供用于设置正则表达式选项的枚举值。
在程序中最为常见的就是用正则表达式去验证居民身份证及其联系方式是否合法,格式是否正确。在WPF教学案例中客户端在新增员工信息页面时就有需要验证输入的电话,身份证的地方。
上面的MVC图片上传例子中还可以实现对WORD文件的上传到网页上显示内容。更是用到了大量的正则。上传文件前面步骤一样,选择文件获取名称,判断文件类型判断文件目录是否存在,不存在就创建,保存该文件路径。重点在于将word转换HTML格式。声明两个新的变量接收文件名称保存路径。引用Spire.Doc类库专门用来读取写入转换打印Word文档。调用Spire.Doc中的Doucument,将文件读取到Doucument中,Doucument就会将文件转换成HTML文件保存起来。接下来就是频繁使用正则匹配替换的代码操作
转换为HTML文件后还要获取P标签中的内容,如果文件包括图片。也需要匹配处理P标签中图片