当前位置: 代码迷 >> Java Web开发 >> 使用common-fileupload组件做下传时,提交的form表单中存在非file类型的内容,怎样才能在处理过程中获取这些内容
  详细解决方案

使用common-fileupload组件做下传时,提交的form表单中存在非file类型的内容,怎样才能在处理过程中获取这些内容

热度:1208   发布时间:2013-02-25 21:12:27.0
使用common-fileupload组件做上传时,提交的form表单中存在非file类型的内容,怎样才能在处理过程中获取这些内容?
我做一个项目,使用common-fileupload组件做上传时,在同一个表单中同时存在file类型 和 text 类型的参数,我想在表单提交上传中,同时获取普通的text类型的参数,并且将这些参数存入数据库中,请各位高手讲下,怎样才能在处理过程中获取text类型的内容?我用的是JSP+Servlet+JavaBean结构做的项目,处理数据库操作的方法全都封装在JavaBean,这样该怎样处理啊? 顺便求一个简单、思路清晰的对common-fileupload组件封装的类,支持多文件上传的。


------解决方案--------------------------------------------------------
如果 enctype 类型为 multipart/form-data 的话,使用 request.getParameter 是得不到数据的。

你已经使用 FileUpload,那就肯定获得了 org.apache.commons.fileupload.servlet.ServletFileUpload 对象。通过 List<FileItem> fileItems = fileUpload.parseRequest(request) 获得 List<FileItem> 集合。遍历这个集合,在 FileItem 中有 isFormField 方法,如果为 true 表示是字段值,否则就是文件域。

使用 FileItem#getFieldName() 获得 form 表单中的各控件的 name,FileItem#getString 获得非文件域的值。

如果是文件域,使用 FileItem#get() 获得上传文件的字节数组,FileItem#getContentType() 获得上传的文件类型,FileItem#getSize() 获得文件大小,FileItem#getName() 获得上传的原始文件名。

这些在 FileUpload 的文件和 API 上都是有的啊,难道都没看到?
------解决方案--------------------------------------------------------
用FileItem的isFormField()方法,如果返回true则说明是普通input域,然后调用FileItem实例的getFieldName()得到input域的name,getString()得到值;如果返回false说明是file类型的input域,调用FileItem实例的getInputStream()得到输入流
------解决方案--------------------------------------------------------
探讨
如果 enctype 类型为 multipart/form-data 的话,使用 request.getParameter 是得不到数据的。

你已经使用 FileUpload,那就肯定获得了 org.apache.commons.fileupload.servlet.ServletFileUpload 对象。通过 List<FileItem> fileItems = fileUpload.parseRequest(request) 获得 List<FileItem> 集合。遍历这个集合,在 FileItem 中有 isFormField 方法,如果为 true 表示是字段值,否则就是文件域。

使用 FileItem#getFieldName() 获得 form 表单中的各控件的 name,FileItem#getString 获得非文件域的值。

如果是文件域,使用 FileItem#get() 获得上传文件的字节数组,FileItem#getContentType() 获得上传的文件类型,FileItem#getSize() 获得文件大小,FileItem#getName() 获得上传的原始文件名。

这些在 FileUpload 的文件和 API 上都是有的啊,难道都没看到?
  相关解决方案