刚做了一个struts架构的web程序中上传文件的功能,顺便分析了其工作原理,现将其总结一下.
首先,jsp页面的form必须有ENCTYPE="multipart/form-data"属性.对于一般的form,HttpServeletRequest类可以直接获取到表单中字段属性,但带有这种属性的表单,需要将其包装为MultipartRequestWrapper类的对象.
接下来,表单在提交过程中被保存到相应的form-bean中,对于文件,以FormFile类型上传.在服务器端,由URI找到相应的ActionMapping,进而得到action的attribute或name属性值,此值就的form-bean的名称,也即我们提交的表单(ActionForm对象).从该ActionForm对象中,我们就可以得到要上传的文件FormFile,由FormFile得到一个inputStream从而建立文件的上传通道.