用cos组件上传文件前先验证文件是否已存在
2011-04-10 15:36
375 查看
在做考试系统的“试题录入”功能时发现,利用cos组件的MultipartRequest可以很顺利地上传文件并获取客户端其余的表单参数
但是我想在上传文件前先验证服务端目录里有没有同名的文件,如果有则取消上传操作,以免意外覆盖掉原有的文件。这时候就不能使用MultipartRequest了,因为调用该类的构造函数的同时就进行了文件上传操作,根本没有机会进行重名等相关判断。
于是我想可以用MultipartParser获取文件名,这样就可以检查服务端是否有重名文件。
如果通过了重名验证,我想再利用MultipartRequest来进行文件上传,因为该类拥有获取同名表单信息,返回数组的方法(例如answer和score),比较方便。可是无奈的发现,用了MultipartParser后,就用不了MultipartRequest了。
由于这一该死的限制,只好将MultipartParser用到底了,上传代码如下:
获取同名表单信息的方法,由于mp的readNextPart方法是将提交的表单信息一个个读取的,而同名的表单信息(例如answer和score)的数量是不确定的,教师在出题时,一道填空题可以有多个空,每个空拥有对应的参考答案和分值,教师可以随意添加或减少考空的数量。所以只能先将它们存放在一个vector里,等循环完毕后,再从该vector对象中提取数组。
当然也可以直接把vector传入model层的方法里,不过之前编码时已经让该方法接受数组参数,现在不想改动它了。
因为既然answer和score是一一对应的关系,所以最好的方法应该是,把它们都封转在一个对象(Blank)里面,充当它的属性,然后把这些对象都放在一个集合对象(例如Vector)中,再把该集合作为参数调用model层的方法,让model层的方法读取并解释这个vector对象。
但是现在不想改了,这只是一个毕业设计,能够混过答辩展示就行了。我想用更多的时间多看点别的书,因为毕业后可能更少时间看书了。
MultipartRequest mr=new MultipartRequest(request, root+"files","utf-8"); //相关数据库操作 //题干,源程序存放路径 String title=mr.getParameter("title"); //一道题目的所有答案 String[] answer=mr.getParameterValues("answer"); //对应的分值 String[] score=mr.getParameterValues("score");
但是我想在上传文件前先验证服务端目录里有没有同名的文件,如果有则取消上传操作,以免意外覆盖掉原有的文件。这时候就不能使用MultipartRequest了,因为调用该类的构造函数的同时就进行了文件上传操作,根本没有机会进行重名等相关判断。
于是我想可以用MultipartParser获取文件名,这样就可以检查服务端是否有重名文件。
MultipartParser mp=new MultipartParser(request,1024*100); mp.setEncoding("utf-8"); Part p=null; while((p=mp.readNextPart())!=null){ if(name.equals("file")){ FilePart fp=(FilePart)p; filename=fp.getFileName(); if(filename!=null&&!filename.equals("")){ f=new File(root+"files//"+filename); if(f.exists()){ //如果重名,则添加考题失败 out.print("<mce:script type="text/javascript"><!-- parent.callback(0); // --></mce:script>"); return; }
如果通过了重名验证,我想再利用MultipartRequest来进行文件上传,因为该类拥有获取同名表单信息,返回数组的方法(例如answer和score),比较方便。可是无奈的发现,用了MultipartParser后,就用不了MultipartRequest了。
由于这一该死的限制,只好将MultipartParser用到底了,上传代码如下:
fp.writeTo(f);
获取同名表单信息的方法,由于mp的readNextPart方法是将提交的表单信息一个个读取的,而同名的表单信息(例如answer和score)的数量是不确定的,教师在出题时,一道填空题可以有多个空,每个空拥有对应的参考答案和分值,教师可以随意添加或减少考空的数量。所以只能先将它们存放在一个vector里,等循环完毕后,再从该vector对象中提取数组。
Vector<String> v_answer=new Vector(5,2); Vector<String> v_score=new Vector(5,2); while((p=mp.readNextPart())!=null){ String name=p.getName(); //................. else if(name.equals("answer")){ v_answer.add(((ParamPart)p).getStringValue("utf-8")); }else if(name.equals("score")){ v_score.add(((ParamPart)p).getStringValue("utf-8")); } } String[] answer=v_answer.toArray(new String[0]); String[] score=v_score.toArray(new String[0]);
当然也可以直接把vector传入model层的方法里,不过之前编码时已经让该方法接受数组参数,现在不想改动它了。
因为既然answer和score是一一对应的关系,所以最好的方法应该是,把它们都封转在一个对象(Blank)里面,充当它的属性,然后把这些对象都放在一个集合对象(例如Vector)中,再把该集合作为参数调用model层的方法,让model层的方法读取并解释这个vector对象。
但是现在不想改了,这只是一个毕业设计,能够混过答辩展示就行了。我想用更多的时间多看点别的书,因为毕业后可能更少时间看书了。
相关文章推荐
- ASP.NET FileUpload上传文件如果存在此文件提示是否覆盖
- asp 判断上传文件中是否存在危险代码
- 如何验证远程服务器上文件是否存在
- php检查上传文件是否已存在或同名
- javascript 客户端验证上传文件是否合法
- C#应用 uploadify 上传前判断文件是否存在
- 利用反射机制来验证上传文件的格式是否符合要求
- 使用Cos组件实现文件的上传和下载
- js验证上传的文件是否为JPEG,PNG,JPG,GIF格式
- ChannelSftp sftp上传文件判断子文件夹是否存在
- php检查上传文件是否已存在或同名
- java 在前端页面上传图片文件,验证是否为合法的图片
- 使用COS组件实现文件上传
- 文件上传时判断文件夹是否存在
- 关于上传文件验证是否安全
- COS 更新,发布Java文件上传组件
- 上传sftp,创建20171024目录,判断目录是否存在,复制文件,判断文件字符集
- asp.net 文件上传验证是否是真正的图片格式
- 计算文件的MD5值上传到服务器 下载验证文件是否被篡改
- js验证上传的文件是否为JPEG,PNG,JPG,GIF格式