关于文件的上传和下载,web是经常使用到的。在大部分时候,表单上用户的请求参数是字符串,但是如果将表单元素设置 =”multipart/form-data”属性,则提交表单时不再以字符串的形式提交参数,而是以二进制的方式提交请求。
enctype 的属性主要有:application/x-www-form-urlencoded (默认编码,只处理value属性值,将其处理成URL编码方式);multipart/form-data (二进制流方式处理表单数据,会把文件域指定文件的内容封装到请求参数中;不能以request.getParameter方法来获取请求参数);text/plain(主要用来表单直接发邮件的方式)。
使用上传框架完成上传,对于java文件而言,比较常用的上传框架有两个:Common-FileUpload和COS,不管使用哪个框架上传,它都负责解析出HttpServletRequest请求中的所有域——不管是文件域还是普通的表单域。
Struts 2的文件上传
Struts 2并未提供自己的请求解析器,也就是说,struts 2不会自己去处理multipart/form-data的请求,它需要调用其他上传框架来解析二进制请求数据。Struts 2在原有的上传解析器基础上做了进一步封装,从而进一步简化了文件上传。
如上图的一个文件上传。
代码如下:
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
文件标题:<input type="text" name="title" /><br />
选择文件:<input type="file" name="upload" /><br />
<input value="上传" type="submit" />
</form>
</body>
Struts 2 的Action无需负责处理HttpServletRequest请求。正如前面介绍的,Struts 2的Action已经与Servlet API完全分离,Struts 2框架负责解析HttpServletRequest请求中的参数&