struts2中的文件上传和下载:
1.首先导入commons-fileupload-1.2.1.jar和commons-io-1.4.jar两个jar包
2.其次JSP页面中的文件上传控件所在的form必须设置属性enctype="multipart/form-data"
3.再次,struts2中文件上传将底层高度封装了。在使用时只需要在ACTION中添加三个字段(其中
List<File> files为必填项),并为其设置get set 属性。
4.接下来你要做的只是将files中的文件对象保存到磁盘即可。
这样就完成了文件上传。如果需要控制上传文件,则需要在struts.xml文件中配置struts2内置的文件上
传拦截器即可。
<interceptor-ref name="fileUpload">
<param name="maximumSize">2MB</param>
<param name="allowedTypes">text/html,image/jpeg</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
需要注意的是<interceptor-ref name="basicStack"/>不能省,因为如果只配置fileUpload拦截器,则其
他的拦截器将失效。
而文件下载可能相对比较简单,具体操作如下:
1.在ACTION中建立一个返回类型为InputStream的方法。如:
public InputStream getTargetFile() throws Exception
{
return ServletActionContext.getServletContext().getResourceAsStream(String 文件的路
径);
}
处理原理为:所有的下载文件都是将一个二进制的流写入到HttpResponse中去。在Action类中定义一个
InputSream类型的二进制流,在Result返回时返回给用户。
2.在struts.xml中配置ACTION信息
<action name="downloadFile" class="com.jpleasure.ImageUploadAction">
<result name="success" type="stream">
<param name="contentType">image/pjpeg</param>
<param name="inputName">imageInputStream</param>
<param name="contentDisposition">attachment;filename="image.jpg"</param>
<param name="bufferSize">1024</param>
</result>
</action>
ContentType表示下载文件的类型。
InputName表示Action类中用来下载文件的字段的名字。
ContentDisposition用来控制文件下载的一些信息,包括是否打开另存对话框,下载文件名等。
BufferSize表示文件下载时使用的缓冲区的大小。
struts.xml配置示例:
<action name="save" class="com.globalzt.struts2.action.StudentAction" method="save">
<result name="success">/studentSuccess.jsp</result>
<result name="error">/studentManagement.jsp</result>
<result name="input">/studentManagement.jsp</result>
<!-- 配置struts2中写好的拦截器,所以name名称不能随便写 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/gif,image/jpeg,image/png</param>
<param name="maximumSize">409600</param>
</interceptor-ref>
<!-- 这句话不能省,否则将忽略其他的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="download" class="com.globalzt.struts2.action.DownloadAction" method="download">
<!-- 这里可以添加需要向ACTION中传递的值,方式为注入:name属性的名称自己定义 -->
<!-- <param name="inputPath">\files\Winter.jpg</param> -->
<result name="success" type="stream">
<!-- 接下来的参数为设置HTTP头信息,在配置的时候要注意name的名称是定死的,不能擅自更改。参见:struts2-core-2.0.11下的org.apache.struts2.dispatcher.StreamResult类 -->
<param name="inputName">inputStream</param>
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() -->
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
1.首先导入commons-fileupload-1.2.1.jar和commons-io-1.4.jar两个jar包
2.其次JSP页面中的文件上传控件所在的form必须设置属性enctype="multipart/form-data"
3.再次,struts2中文件上传将底层高度封装了。在使用时只需要在ACTION中添加三个字段(其中
List<File> files为必填项),并为其设置get set 属性。
4.接下来你要做的只是将files中的文件对象保存到磁盘即可。
这样就完成了文件上传。如果需要控制上传文件,则需要在struts.xml文件中配置struts2内置的文件上
传拦截器即可。
<interceptor-ref name="fileUpload">
<param name="maximumSize">2MB</param>
<param name="allowedTypes">text/html,image/jpeg</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
需要注意的是<interceptor-ref name="basicStack"/>不能省,因为如果只配置fileUpload拦截器,则其
他的拦截器将失效。
而文件下载可能相对比较简单,具体操作如下:
1.在ACTION中建立一个返回类型为InputStream的方法。如:
public InputStream getTargetFile() throws Exception
{
return ServletActionContext.getServletContext().getResourceAsStream(String 文件的路
径);
}
处理原理为:所有的下载文件都是将一个二进制的流写入到HttpResponse中去。在Action类中定义一个
InputSream类型的二进制流,在Result返回时返回给用户。
2.在struts.xml中配置ACTION信息
<action name="downloadFile" class="com.jpleasure.ImageUploadAction">
<result name="success" type="stream">
<param name="contentType">image/pjpeg</param>
<param name="inputName">imageInputStream</param>
<param name="contentDisposition">attachment;filename="image.jpg"</param>
<param name="bufferSize">1024</param>
</result>
</action>
ContentType表示下载文件的类型。
InputName表示Action类中用来下载文件的字段的名字。
ContentDisposition用来控制文件下载的一些信息,包括是否打开另存对话框,下载文件名等。
BufferSize表示文件下载时使用的缓冲区的大小。
struts.xml配置示例:
<action name="save" class="com.globalzt.struts2.action.StudentAction" method="save">
<result name="success">/studentSuccess.jsp</result>
<result name="error">/studentManagement.jsp</result>
<result name="input">/studentManagement.jsp</result>
<!-- 配置struts2中写好的拦截器,所以name名称不能随便写 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/gif,image/jpeg,image/png</param>
<param name="maximumSize">409600</param>
</interceptor-ref>
<!-- 这句话不能省,否则将忽略其他的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="download" class="com.globalzt.struts2.action.DownloadAction" method="download">
<!-- 这里可以添加需要向ACTION中传递的值,方式为注入:name属性的名称自己定义 -->
<!-- <param name="inputPath">\files\Winter.jpg</param> -->
<result name="success" type="stream">
<!-- 接下来的参数为设置HTTP头信息,在配置的时候要注意name的名称是定死的,不能擅自更改。参见:struts2-core-2.0.11下的org.apache.struts2.dispatcher.StreamResult类 -->
<param name="inputName">inputStream</param>
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() -->
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>