文件上传的解决方案总结
网上主要有两种可用的参考组件,
第一种是用jspSmartUpload组件,参考资料:http://www.zhuoda.org/lunzi/20971.html,
第二种是用Apache组织的commons项目中的FileUpload组件,参考资料http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html。
今天介绍第二种方案中的文件上传,文件下载功能则可细想而知。
第二种方案中文件上传,其实就是将request对象中的inputStream解析出来,并获取文件的信息流,将文件信息流存储到服务器上。
举个例子:以下视图包括了一个文件上传的form表单
Form表单中是这样描述的:
<form name="contact_addPatch" enctype="MULTIPART/FORM-DATA" method=post>
……
</form>
注意enctype值需要写成MULTIPART/FORM-DATA
当点击确定之后,提交给了一个servlet来处理,servlet则在request对象中分析这个inputstream流文件,
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
Iterator iter = items.iterator();
//获取form表单里面的信息
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString(ENCODING);
if (fieldName.equals("ins_id2")) {
request.setAttribute("ins_id2", fieldValue);
}
}
else {
InputStreamReader inputStreamReader = new InputStreamReader (item.getInputStream());
……
}
}
这就是整个分析的过程,inputStreamReader对象则可以按行读取,也可以写到磁盘上。
此例中还有一个亮点,读取csv文件。其实csv文件就是一个txt文件形式。它只不过是将文本信息通过逗号分割起来了。所以,只要按照“,”来分取csv文件中的信息,则可以读取成功。
信息字段的校验可以通过java.util.regex.Pattern;来实现,至于Pattern如何使用,敬请参考sun的java手册。
附件中的一个例子,就是从客户端获取csv文件,并读取里面的首列的。
参考资料:
http://www.knowsky.com/4257.html
http://www.zhuoda.org/lunzi/20971.html
http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html
http://www.ymjc.com.cn/development/p344/J34442370.shtml
http://www.diybl.com/course/3_program/java/javashl/2008520/117162.html