第13章 文件上传与下载
文件上传
依赖commons FileUpload,同时依赖commons IO
在页面中设置file表单控件,指定enctype="multipart/form-data"
在Action里面用java.io.File类来接收这个控件,另外定义两个String类型属性:file控件名+FileName(文件名);file控件名+ContentType(文件内容类型)
在execute()方法里面进行保存文件操作
根据File变量构造一个文件输入流
构建一个文件输出流
如果需要保存当前服务的某包下面,通过ServletActionContext.getRequest().getRealPath("/包");
InputStream is = new FileInputStream(file);
String root = ServletActionContext.getRequest().getRealPath("/");
File diskFile = new File(root,getFileFileName);
OutputStream os = new FileOutputStream(diskFile);
byte[] buffer = new byte[1024];
int i = 0;
while((i = is.read(buffer)) > 0) {
os.write(buffer,0,i);
}
is.close();
os.close();
全局环境变量设置。在struts.xml中添加
中文转码问题
<constant name="struts.i18n.encoding" value="utf-8"/>(default.properties里面默认就是utf-8的)
临时存储目录
<constant name="struts.multipart.saveDir" value="c:/" />(默认没有指定)
上传文件大小
<constant name="struts.multipart.maxSize" value="10240000"/> //value不能使用表达式
允许的文件类型
在相应的action里面把fileUpload拦截器单独提出来配置
<action ....>
<result ...>...</result>
<intercepter-ref name="defaultStack">
<!-- 这里的文件类型可以到tomcat目录下的conf目录下的web.xml中去找 -->
<param name="fileUpload.allowedTypes">text/plain</param>
<param name="fileUpload.maximumSize">1024000</param>
</intercepter-ref>
</action>
在struts-messages.properties里面配置很多消息,可以在资源束文件中覆盖这些key对应的值以达到国际化的目的
不符合要求则自动添加错误信息到fieldError,并回到input的result页面
对应的key分别是:类型不允许struts.messages.error.content.type.not.allowed
文件过大 struts.messages.error.file.too.large
其他上传错误 struts.messages.error.uploading
多文件上传
将File和它对应的两个String类型变量都修改为List类型,因为他们是一一对应的关系,所以循环集合便可以一一保存
文件下载
stream结果类型
contentType MIMETYPE
contentDisposition 下载方式和文件名
inputName 指定Action里面返回InputStream的方法名
inputStream 接收上面这个方法的返回值
bufferSize 缓冲大小,默认1k
Action里面添加一个返回InputStream的方法
public InputSteam getDownloadFile() {
return new FileInputStream("上下文内在资源及路径");
}
struts.xml
<action ....>
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-powerpoint</param> //参见tomcat的web.xml
<param name="contentDisposition">filename="文件名"</param>
<!-- <param name="inputName">action里返回InputStream的方法名,去掉get改首字母小写</param> -->
</result>
</action>
中文文件名的问题
struts2文件上传和下载
最新推荐文章于 2024-06-29 22:48:48 发布