struts2 文件上传与下载 (简洁实例)

jar列表:


commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
freemarker-2.3.18.jar
ognl-3.0.4.jar
struts2-core-2.3.1.2.jar
xwork-core-2.3.1.2.jar[size=xx-small][/size]
javassist-3.11.0.GA.jar


Action:

/* 上传文件存放的目录 */
private final static String UPLOAD_URL = "/test";
/* 上传文件的集合 */
private List<File> file; //必须与表单元素的NAME属性值一致
/* 上传文件名的集合 */
private List<String> fileFileName;
//必须跟随文件名再追加FileName
/* 上传文件类型的集合 */
private List<String> fileFileContentType;
//必须跟随文件名再追加fileFileContentType

/* ... 省略GET SET */

public String uploadFile(){
for(int i = 0; i < file.size();i++){
try {
this.upload(i); //自定义方法调用
} catch (Exception e) {
e.printStackTrace();
}
}
return "success";
}


private void upload(int i) throws Exception{
[align=left][/align] InputStream in = new FileInputStream(file.get(i));
String dir = ServletActionContext.getServletContext().getRealPath(UPLOAD_URL);
File uploadFile = new File(dir, this.getFileFileName().get(i)); //上传的文件
OutputStream out = new FileOutputStream(uploadFile);
byte [] buffer = new byte[1024*1024];
int length;
while((length = in.read(buffer))> 0){
out.write(buffer,0,length);
}
if(in!=null)
in.close();
if(out!=null)
out.close();
}



Jsp:

<!-- 文件上传需要更改enctype属性:以二进制形式进行文件上传:multipart/form-data -->
<s:form action="你的ACTION名称.action!你要指定ACTION类中的方法" method="post" enctype="multipart/form-data">
<s:file name="file"></s:file><br/>
<s:file name="file"></s:file><br/>
<s:file name="file"></s:file><br/>
<s:submit value="开始上传"></s:submit>
</s:form>


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 系统常量定义,定义上传文件字符集编码 -->
<constant name="struts.i18n.encoding" value="gb2312"></constant>
<!-- 系统常量定义,定义上传文件临时存放目录 -->
<constant name="struts.multipart.saveDir" value="f:\"></constant>

<!-- com.a.b.c.d.JavaClass-->
<action name="自定义的名称" class="你的处理文件上传的ACTION类路径(需写完整的路径名:所有的包名)">
</struts>



文件下载:下载ACTION类

private String downLoad; //负责接收文件名
private String inputPath; //源文路径
/* 属性的GET SET 省略 */

/* 带有InputStream返回值的(get)方法 */
public InputStream getTargetFile(){
return ServletActionContext.getServletContext().getResourceAsStream(inputPath+downLoad);
}

public String execute() {
return "success";
}



Struts.xml 配置下载action

<action name="" class="">
<!-- 为action中的inputPath属性初始化值 -->
<param name="inputPath">/test/</param>
<result type="stream"> <!-- 指定类型stream 以流形式进行传输 -->
<param name="contentType">image/gif</param> <!--指定文件内容类型和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片 -->
<param name="inputName">targetFile</param><!--对应action类中的getTargetFile方法-->
<param name="contentDisposition">attachment;filename="123.gif"</param>
<!--指定文件以附件形式弹出下载对话框;filename="123.gif" 指定下载对话框中显示的文件名称;
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
如果直接写filename="123.gif",默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="123.gif"-->
<param name="bufferSize">4096</param> <!--指定下载缓冲区的大小-->
</result>
</action>


Jsp:

<a href="downLoad.action?downLoad=1.gif">下载</a>
<!-- 传值给ACTION类中的downLoad属性,指定下载的文件名称 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值