struts2上传与下载

1 篇文章 0 订阅
1 篇文章 0 订阅

上传

在Action里

private File abcFile;
private String abcFileName;//这两个参数是可选的

private String abcContentType;//这两个参数是可选的

然后生成set方法

当表单提交之后 如果有上传文件的话 上面三个值就已经自动设置好了

如果有多个文件 假设都是 <input type="file" name="abc" />

那只要将上面3个都改成数组或List就行了

关于上传文件类型 和大小限制等 参见fileUpload拦截器

<action name="sc" class="ssh.action.UploadAction" method="m1">
<result>/success.jsp</result>
<result name="input">/upload.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">5242880</param><!-- 5MB --> 单个文件最大5MB
<!-- <param name="fileUpload.allowedTypes"></param> -->
<param name="fileUpload.allowedExtensions">zip,rar</param>//后缀名只能是zip或rar
</interceptor-ref>

</action>

另外还需要再struts.xml里

<constant name="struts.multipart.maxSize" value="20971520"/>//总的大小不超过20MB


upload.jsp 片段

<s:debug/>
<s:fielderror value="abc"/>
<form action="sc" method="post" enctype="multipart/form-data">
<input type="file" name="abc" />
<input type="file" name="abc" />
<input type="file" name="abc" />
<input type="file" name="abc" />
<input type="file" name="abc" />
<input type="submit" value="submit" />
</form>

Action 片段

public String m1() {
if (abc != null) {
for (int i = 0; i < abc.length; ++i) {//可以发现实际提交了几个 长度就为几
System.out.println( abc[i].getName() + " " + abcFileName[i] + " " + abcContentType[i] );
}
}
return SUCCESS;
}


下载

假设在你的Action中有一个叫
abcStream的属性 (有getAbcStream()方法 返回InputStream)


在配置文件里
<action name="download" class="xxx" method="yyy">
<result type="stream">//这里有部分值是写死的 可以考虑用ognl表达式动态设置
<param name="contentType">image/jpeg</param>//表明打开/下载的是图片
<param name="inputName">abcStream</param>//写流的名字

<!-- 如果是inline就是在浏览器中打开 -->
<param name="contentDisposition">attachment;filename="xxx.jpg"</param>//提示浏览器打开下载窗口,文件名是xxx.jpg

<param name="bufferSize">1024</param>//缓存大小 默认就是1024 不设置也行
<param name="contentLength ">${contentLength}</param>//内容的长度 这里使用了ognl表达式 所以在相应的Action里有一个contentLength属性
//如果不设置这个值,则下载的时候看不到文件的总大小
</result>
</action>


如果下载文件名有中文 则需要 <param name="contentDisposition">attachment;filename="${@java.net.URLEncoder@encode('测试.jpg','utf-8')}"</param>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值