您的位置:首页 > 其它

用cos组件上传文件前先验证文件是否已存在

2011-04-10 15:36 375 查看
在做考试系统的“试题录入”功能时发现,利用cos组件的MultipartRequest可以很顺利地上传文件并获取客户端其余的表单参数

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对象。

  但是现在不想改了,这只是一个毕业设计,能够混过答辩展示就行了。我想用更多的时间多看点别的书,因为毕业后可能更少时间看书了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: