说我的博客文字太多,没办法就分两篇发了,都是第3的知识点,前面讲了LookupDispatchAction,这里讲解文件的上传和下载!
文件的上传
先是文件的上传吧,因为有了上传才会有下载,HOHO!
首先,还是action的书写,示例:
- //文件上传代码
- public class FileUpLoadAction extends Action{
-
public ActionForward execute(ActionMapping mapping, ActionForm form,
-
HttpServletRequest request, HttpServletResponse response)
-
throws Exception {
-
FilesForm ffs = (FilesForm)form; //获得formbean对象
-
FormFile ff = ffs.getMyfile(); //获得到FormFile对象
-
InputStream is = ff.getInputStream();//获得一个写入流
-
OutputStream os = new FileOutputStream("c:/"+new SimpleDateFormat("yyyy-MM-dd HH.mm.ss").format(new Date())+".png"); //以上传时间为名字,避免文件名的重复,并获得一个输出流
-
byte [] by = new byte[is.available()];//定义一个byte数组用了装文件数据
-
int len = 0;
-
while((len=is.read(by))!= -1){//如果小于-1就是读完了
-
os.write(by,0,len); //从0开始,读到最后结束
-
}
-
is.close();
-
os.flush();
-
os.close();
-
return mapping.findForward("success");
-
}
下来是FormBean的书写:
- //FormBean的书写,其中的myfile跟jsp页面上的property值对应!
- public class FilesForm extends ActionForm {
-
private FormFile myfile;
-
public FormFile getMyfile() {
-
return myfile;
-
}
-
public void setMyfile(FormFile myfile) {
-
this.myfile = myfile;
-
}
- }
接着是配置文件的配置:
- <!--FormBean的配置-->
- <form-beans>
-
<form-bean name="files" type="com.lovo.form.FilesForm"></form-bean>
- </form-beans>
-
- <!--Action的配置-->
-
<action path="/file" type="com.lovo.action.FileUpLoadAction" name="files" validate="false">
-
<forward name="success" path="/success.jsp"></forward>
- </action>
这里的配置跟一个普通的action和formbean的配置没有什么区别!
然后是jsp页面的书写:
<html:form action="file.do" method="post" enctype="multipart/form-data">
<html:file property="myfile"></html:file>
<html:submit value="上传"></html:submit>
</html:form>
提示:form的enctype="multipart/form-data"
必须配置,并且,Mehtod必须是post类型
<html:file property="myfile"></html:file>
的property的值为formbean里面的属性名!
文件的下载
文件的下载在Struts中提供了一个内置的实现类也就是DownloadAction这个类,下面我们来书写一个Action来继承这个类代码如下:
- //文件的下载 继承DownloadAction并实现getStreamInfo方法
- public class FileDownAction extends DownloadAction {
-
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
-
HttpServletRequest request, HttpServletResponse response)
-
throws Exception {
-
response.setContentType("application/x-download");//设置response的meta的类型为下载类型,这样浏览器才会弹出保持对话框
-
response.setHeader("Content-Disposition", "attachment;filename=" + "mm.png");//设置响应头,第一个参数为设置文件的默认名,第二个参数是目的是用户下载(保存文件)给出一个文件的默认的具体名字
-
StreamInfo si = new FileStreamInfo("image/png",new File("c:/mm.png"));//因为StreamInfo 是一个接口,那么来创建它的实现类FileStreamInfo,第一个参数是文件类型,第二个参数是文件在服务器上的的保持位置,这里最好是具体的文件位置
-
return si;//返回StreamInfo
-
}
- }
action的配置就较为简单了,也不需要formbean的参与代码如下:
<action path="/down" type="com.lovo.action.FileDownAction" ></action>
这里Action的配置就不做讲解了!
最后是JSP的书写,也很简单:
<a href="down.do">下载</a>
这样就可以完成下载了!
好了,今天的知识点先总结到此!
|