关于上传组件jspsmart和commonfileupload的一些感触!!

      最近用jsp+servlet+javabean写了个小项目,说小也不小,里面的功能相对于来说都挺全的。能够实现最基础的增删改查,这个所谓的增删改查,是仿照以前用过的几个cms系统来实现的。。。。其中令我最费劲的我感觉还是属于上传的功能了。。。

      因为以前没做过上传的功能,所以也没怎么关注。。。但这次的模块用到了上传,所以就费劲心思的研究了上传的功能。。。

      目前网上流传的上传组件主要有这么几个,jspsmart,commandfileload,以及structs的commanfileload,因为我的ssh还没学,所以就用了jspsmart和commandfileload了。最初我使用的是jspsmart这个组件,因为看到他主要是针对jsp页面来实现的,但随着我研究和使用一段时间后,发现上传老是报错,因为我把jspsmart都是写在了servlet里,所以上传的时候牵涉到一些跳转问题。。但是还是报错。。。网上说一般它主要是应用到页面上的。。。并且它的上传大小最大值好似是受限。。。。最终我把做了一般的项目停下了,把里面的上传组件的所有内容又改成了commanfileload.

      其中在运用commanfileload组件的过程中有几点值得注意的问题:

      首先是servlet类中传值的问题。因为从jsp页面传值过来的是一个表单,而拥有上传文本域的表单变成了表单域,表单域中不同于普通的表单,多了这个代码enctype="multipart/form-data",这是一个二进制的标志,也就是说表单里提交的值被二进制化了,结果在servlet中接受的时候,可能会变成空值,所以不能用普通的request来接收表单域的传值,而fileupload里面已经给我们规定了接收值的方法,它是给我们解析了一下,分为普通的空间和可上传的控件(须看fileupload的servlet代码,上面有文本注释),但是上面这一块代码需注意,

if(fileItem.isFormField()){
                 if(fileItem.getFieldName().equals("method")){
                     method = new String(fileItem.getString().getBytes("iso-8859-1"),"utf-8");
                    
                }
                }

这就是分析的,属于普通空间里然后根据控件的名称来取值,这是fileupload的方法自带的,这里接收值时容易出现乱码,写了过滤器也避免不了,所以我用了new String(fileItem.getString().getBytes("iso-8859-1"),"utf-8")这种格式,来实现规定编码的格式,这样我试过了,接收的值不会出现乱码了,所以大家以后用的时候也注意点。。。

     第二点,是上传的时候的路径,上传的路径是可变的,而上传的路径也最容易出现问题。而java里面针对这个问题对定了this.getServletContext().getRealPath("/")这个命令,这是一个绝对路径,能够自动识别的把你所想要上传的文件存到你的工程里,然后后面你再建个文件夹来存放它就ok了。。。

     最后一点值得提醒的是往数据库可能需要存储咱存放文件的路径,而我们常用的数据库多是mysql或oracle,我用的是mysql,再往mysql存放路径时,mysql对路径的一些反斜线可能不识别,如“/”,它只识别“/”,在我插入数据库内容时我还纳闷了很久呢!!在我调试了很久后,总算是查出这个问题了,在这里我向大家提醒一下,大家要多注意一下。

     基本上用commonfileupload就这么些问题了。。希望我写的这些对大家能有点小的帮助。。

原文地址:https://www.cnblogs.com/shunxiyuan/p/commonfileupload.html