說(shuō)我的博客文字太多,沒(méi)辦法就分兩篇發(fā)了,都是第3的知識(shí)點(diǎn),前面講了LookupDispatchAction,這里講解文件的上傳和下載!
文件的上傳
先是文件的上傳吧,因?yàn)橛辛松蟼鞑艜?huì)有下載,HOHO!
首先,還是action的書(shū)寫(xiě),示例:
- //文件上傳代碼
- public class FileUpLoadAction extends Action{
-
public ActionForward execute(ActionMapping mapping, ActionForm form,
-
HttpServletRequest request, HttpServletResponse response)
-
throws Exception {
-
FilesForm ffs = (FilesForm)form; //獲得formbean對(duì)象
-
FormFile ff = ffs.getMyfile(); //獲得到FormFile對(duì)象
-
InputStream is = ff.getInputStream();//獲得一個(gè)寫(xiě)入流
-
OutputStream os = new FileOutputStream("c:/"+new SimpleDateFormat("yyyy-MM-dd HH.mm.ss").format(new Date())+".png"); //以上傳時(shí)間為名字,避免文件名的重復(fù),并獲得一個(gè)輸出流
-
byte [] by = new byte[is.available()];//定義一個(gè)byte數(shù)組用了裝文件數(shù)據(jù)
-
int len = 0;
-
while((len=is.read(by))!= -1){//如果小于-1就是讀完了
-
os.write(by,0,len); //從0開(kāi)始,讀到最后結(jié)束
-
}
-
is.close();
-
os.flush();
-
os.close();
-
return mapping.findForward("success");
-
}
下來(lái)是FormBean的書(shū)寫(xiě):
- //FormBean的書(shū)寫(xiě),其中的myfile跟jsp頁(yè)面上的property值對(duì)應(yīng)!
- 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>
這里的配置跟一個(gè)普通的action和formbean的配置沒(méi)有什么區(qū)別!
然后是jsp頁(yè)面的書(shū)寫(xiě):
<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中提供了一個(gè)內(nèi)置的實(shí)現(xiàn)類也就是DownloadAction這個(gè)類,下面我們來(lái)書(shū)寫(xiě)一個(gè)Action來(lái)繼承這個(gè)類代碼如下:
- //文件的下載 繼承DownloadAction并實(shí)現(xiàn)getStreamInfo方法
- public class FileDownAction extends DownloadAction {
-
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
-
HttpServletRequest request, HttpServletResponse response)
-
throws Exception {
-
response.setContentType("application/x-download");//設(shè)置response的meta的類型為下載類型,這樣瀏覽器才會(huì)彈出保持對(duì)話框
-
response.setHeader("Content-Disposition", "attachment;filename=" + "mm.png");//設(shè)置響應(yīng)頭,第一個(gè)參數(shù)為設(shè)置文件的默認(rèn)名,第二個(gè)參數(shù)是目的是用戶下載(保存文件)給出一個(gè)文件的默認(rèn)的具體名字
-
StreamInfo si = new FileStreamInfo("image/png",new File("c:/mm.png"));//因?yàn)镾treamInfo 是一個(gè)接口,那么來(lái)創(chuàng)建它的實(shí)現(xiàn)類FileStreamInfo,第一個(gè)參數(shù)是文件類型,第二個(gè)參數(shù)是文件在服務(wù)器上的的保持位置,這里最好是具體的文件位置
-
return si;//返回StreamInfo
-
}
- }
action的配置就較為簡(jiǎn)單了,也不需要formbean的參與代碼如下:
<action path="/down" type="com.lovo.action.FileDownAction" ></action>
這里Action的配置就不做講解了!
最后是JSP的書(shū)寫(xiě),也很簡(jiǎn)單:
<a href="down.do">下載</a>
這樣就可以完成下載了!
好了,今天的知識(shí)點(diǎn)先總結(jié)到此!
|