一、文件上传和下载
9.1 文件上传
1)三个条件:
表单有file
post提交
enctype="multipart/form-data"
2)在Action中接收文件内容
File attach; (attach是file表单的name属性)
String attachContentType; 文件类型
String attachFileName; 文件名称 这些文件名 文件类型都是固定的
细节:
修改上传大小
<!-- 修改默认文件上传大小 -->
<constant name="struts.multipart.maxSize" value="100000000"></constant>
修改允许上传的文件类型和文件后缀
<action name="upload" class="gz.itcast.h_upload_down.UploadAction" >
<!-- 往FileUploadInterceptor拦截器的属性注入值(调用setter方法) -->
<interceptor-ref name="defaultStack">
<!-- 改变当前文件上传拦截器的允许文件类型 -->
<param name="fileUpload.allowedTypes">image/jpeg,image/jpg</param>
<!-- 允许的文件后缀 -->
<param name="fileUpload.allowedExtensions">jpg,jpeg,gif</param>
<!-- 如果以上配置都写了,那么取他们的交集 -->
</interceptor-ref>
<param name="savePath">e:/images/</param>
<result>/login.jsp</result>
<result name="input">/error.jsp</result>
</action>
9.2 文件下载
视图类型一定是stream类型
<action name="down_*" class="gz.itcast.h_upload_down.DownAction" method="{1}">
<param name="serverPath">e:/images/</param>
<result name="list">/listFile.jsp</result>
<!-- 文件下载的关键: 视图类型一定是stream -->
<result name="down" type="stream">
<!-- 往StreamResult类中的属性注入内容 -->
<!-- 返回给浏览器的文件类型。返回通用的二进制 -->
<param name="contentType">application/octet-stream</param>
<!-- 返回给浏览器的输入流 -->
<param name="inputName">inputStream</param>
<!-- 告诉浏览器的方式下载资源
${name}: 获取Action中的getName()方法的数据
-->
<param name="contentDisposition">attachment;filename=${name}</param>
<!-- 缓存大小 -->
<param name="bufferSize">1024</param>
</result>
</action>
在Action对象中提供一个对应的获取输入流的方法
//需要提供给struts写出数据的输入流
public InputStream getInputStream(){
try {
FileInputStream fis = new FileInputStream(new File(serverPath+name));
return fis;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public String getName() {
return name;
}
9.1 文件上传
1)三个条件:
表单有file
post提交
enctype="multipart/form-data"
2)在Action中接收文件内容
File attach; (attach是file表单的name属性)
String attachContentType; 文件类型
String attachFileName; 文件名称 这些文件名 文件类型都是固定的
细节:
修改上传大小
<!-- 修改默认文件上传大小 -->
<constant name="struts.multipart.maxSize" value="100000000"></constant>
修改允许上传的文件类型和文件后缀
<action name="upload" class="gz.itcast.h_upload_down.UploadAction" >
<!-- 往FileUploadInterceptor拦截器的属性注入值(调用setter方法) -->
<interceptor-ref name="defaultStack">
<!-- 改变当前文件上传拦截器的允许文件类型 -->
<param name="fileUpload.allowedTypes">image/jpeg,image/jpg</param>
<!-- 允许的文件后缀 -->
<param name="fileUpload.allowedExtensions">jpg,jpeg,gif</param>
<!-- 如果以上配置都写了,那么取他们的交集 -->
</interceptor-ref>
<param name="savePath">e:/images/</param>
<result>/login.jsp</result>
<result name="input">/error.jsp</result>
</action>
9.2 文件下载
视图类型一定是stream类型
<action name="down_*" class="gz.itcast.h_upload_down.DownAction" method="{1}">
<param name="serverPath">e:/images/</param>
<result name="list">/listFile.jsp</result>
<!-- 文件下载的关键: 视图类型一定是stream -->
<result name="down" type="stream">
<!-- 往StreamResult类中的属性注入内容 -->
<!-- 返回给浏览器的文件类型。返回通用的二进制 -->
<param name="contentType">application/octet-stream</param>
<!-- 返回给浏览器的输入流 -->
<param name="inputName">inputStream</param>
<!-- 告诉浏览器的方式下载资源
${name}: 获取Action中的getName()方法的数据
-->
<param name="contentDisposition">attachment;filename=${name}</param>
<!-- 缓存大小 -->
<param name="bufferSize">1024</param>
</result>
</action>
在Action对象中提供一个对应的获取输入流的方法
//需要提供给struts写出数据的输入流
public InputStream getInputStream(){
try {
FileInputStream fis = new FileInputStream(new File(serverPath+name));
return fis;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public String getName() {
return name;
}