开发工具与关键技术:VS+MVC
作者:李钊海
撰写时间:2019年4月3日星期三
在项目中当做到文件上传这一个模块时,一般我们会把上传的文件分情况地保存到不同的文件夹里面,总的来说分为两大类,如下:
一、临时文件类(已选择上传但是还没有最终确定的文件,在这里临时保存)
二、最终文件夹(已经最终确定的文件,在这里进行最终的保存)
当开始对页面传输到控制器的文件进行保存前,还要对这个文件进行一系列的处理和判断。先封装一个实体,用来接收页面传过来的文件并且作用于最后的返回数据参数,方便用户在选择的时候直接确认文件是无误的。用一个try catch 来捕捉文件处理和保存中可能出现的错误,不至于整个模块出现崩溃现象。用try catch 还有一个好处,就是方便找错误,节省查错的时间,提高工作效率。
开始处理文件前要先判断传来的文件是否为空,判断的条件可以根据自己的思路进行判断(!=是不等于)如果判断为空则直接提醒用户,即然为空就不需要做任何操作了。可以用 != 判断需要的操作放在if里面,也可以 = 做判断,然后需要进行的操作放到else里面即可。目的一致方法多样。只要效果能实现就可以。
当文件不为空时,首先就要获取这个文件的文件类型。文件类型不获取后面的操作也是无法进行下去的。因为我们获取到这个文件类型后要给它创建一个新的文件的名称,这个文件名称是获取当时的日期加上一个表示全球唯一标识符(GUID)再加上获取到的文件名称拼接来的,目的就是为了尽可能的防止文件的名称一致导致数据出错。下面附带代码图
附代码图
安全起见还要对保存的路径目录进行检查判断是否存在,上图中漏了对最终的文件夹进行判断。这两个判断都差不多一样的就只有路径有点不同。都是不存在就将这个目录创建出来,存在则直接跳过此判断对文件路径进行保存。当然如果你手动创建或者你千真万确这个目录是存在的这个判断是可以省略掉的。我们当然要尽可能的做到防范于未然给它加上这个判断为好。
紧接着就是用一个字符窜来接收文件路径和文件名称方便保存了,毕竟文件路径加上规范后的文件名称太长了,容易出错。接着就判断这个文件的扩展名了。只要有扩展名就可以进行下一步操作。
为了方便判断先把后缀全部转化为小写字母的样式。结合附带的代码图更助于理解。
好了到了这里就只差判断它是不是图片就可以正式保存了(毕竟主题就是处理图片)判断是不是图片当然是用后缀来区分啊,就拿后缀已经转化为小写字母的文件进行判断,我们只需要后缀为gif, jpg, bmp, jpeg, png 这五种的文件,只要是以这五种为后缀的都是图片,那只要不是图片的就提示用户 只能上传图片,是图片就进行保存。保存后的事就简单了。因为用到了富文本编辑器这个插件,它功能强大但是用它也有点麻烦,就是返回的东西多了,需返回是否成功,URL链接和文件的名称三个参数到实体上面。由实体把数据返到页面。
这个文本编辑器的功能就有上图这么多,其中我讲到的就只有图片上传的处理,保存成功后把存放在临时文件夹中的图片移动到最终文件夹中进行最终保存,把读取文件的路径全部替换为最终文件。 这就是图片文件的处理方法了。
现在总结一下图片处理的难点:一个是对插件的不熟悉,对插件的参数要求不够明确,不能灵活运用插件。另一个就是逻辑不通,思路不明。这个才是直接导致不会敲的重要原因。只要思路明确代码敲起来便会顺风顺水。
所以不急着敲在开始敲之前要先把思路搞明白了在开始动手。再有就是平时一定要多敲,要用心的敲,熟能生巧,勤能补拙。这话还是有道理的。