struts2中文件上传和下载

原理:

Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

不多说:上码:

先新建一个jsp页面:一个form表单

<s:form action="upload" method="post" enctype="multipart/form-data"> <s:file name="file" label="请选择要上传的文件"></s:file> <s:submit label="上传"></s:submit> </s:form> 注意:method:必须是post,还有上传的编码必须是:multipart/form-data

然后再建一个action类:

private File file;//文件 private String fileFileName;//文件名称.名字不能变 private String fileContentType;//文件类型,名字不能变 注意:fileFileName:该文件名称不能变。fileContentType:文件类型的名称也不能变。这是因为struts2默认的对文件上传的注入。它在底层已经封装好了。我们可以直接用就行了。

最后当然是最重要的实现上传了。

@Override public String execute() throws Exception { String path=ServletActionContext.getServletContext().getRealPath(savePath);//存放的路径 String fileName=path+"\\"+user.getFileFileName();//文件名 BufferedInputStream bis=null;//文件输入流 BufferedOutputStream fis=null;//文件输出流 try { //文件输入流 bis=new BufferedInputStream(new FileInputStream(user.getFile())); //文件输出流 fis=new BufferedOutputStream(new FileOutputStream(fileName)); //新建一个数组存放文件数据 byte[] bt=new byte[1024]; int len=0; //读取文件,判读文件是否还有数据 while((len=bis.read(bt))!=-1){ //写到bt数组里,从0开始,到len写入数据,是因为数组大小可能会超过文件大小 fis.write(bt,0,len); } } catch (Exception e) { e.printStackTrace(); return ERROR; }finally{//关闭输入,输出流 try { if(bis!=null) bis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(fis!=null) fis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return SUCCESS; }

还有struts.xml文件

<action name="upload" class="com.accp.Action.UploadAction"> <param name="savePath">upload</param> <result name="success">/uploadSuc.jsp</result> <result name="input">/uploadFail.jsp</result> <interceptor-ref name="defaultStack"> <!--配置单个文件最大字节 --> <param name="fileUpload.maximumSize">102400</param> <!-- 配置文件类型,注意文件类型不是.jpg.而是有一个类型名称。可以再tomact/conf/web.xml文件查找类型 --> <param name="fileUpload.allowedTypes">image/pjpeg</param> </interceptor-ref> </action>

下载:(实现一个简单的下载)

一个jsp页面:<a href="download.action">下载</a>

一个action类:

public class Download extends ActionSupport{ public InputStream getDownloadFile(){ //返回一个输出流实例 return ServletActionContext.getServletContext().getResourceAsStream("/upload/123.jpg"); } @Override public String execute() throws Exception { return SUCCESS; } } struts.xml文件:

<action name="download" class="com.accp.Action.Download"> <result name="success" type="stream"> <!-- 下载类型 --> <param name="contentType">image/pjpeg</param> <!-- 文件名,是因为http协议的关系所以要file="" --> <param name="contentDisposition">filename="123.jpg"</param> <!-- 输入流 ,downloadFile是getDownloadFile() 获取过来的 方法名。默认规定--> <param name="inputName">downloadFile</param> </result> </action>over.....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值