利用apache-commons-fileupload写jsp上传文件
利用apache-commons-fileupload寫jsp上傳文件
需要下載fileupload和beanutils兩個包,代碼如下。
<%@?page?language="java"?contentType="text/html;charset=gb2312"%><%@?page?import="java.util.*"%>
<%@?page?import="java.io.*"%>
<%@?page?import="org.apache.commons.fileupload.*"%>
<%!
String?Mkdir(String?path)?{
????String?msg=null;
????java.io.File?dir;
????//?新建文件對象
????dir?=new?java.io.File(path);
????if?(dir?==?null)?{
????????msg?=?"錯誤原因:<BR>對不起,不能創建空目錄!";
????????return?msg;
????}
????if?(dir.isFile())?{
????????msg?=?"錯誤原因:<BR>已有同名文件<B>"?+?dir.getAbsolutePath()?+?"</B>存在。";
????????return?msg;
????}
????if?(!dir.exists())?{
????????boolean?result?=?dir.mkdirs();
????????if?(result?==?false)?{
????????????msg?=?"錯誤原因:<BR>目錄<b>"?+?dir.getAbsolutePath()?+?"</B>創建失敗,原因不明!";
????????????return?msg;
????????}
????????//?如果成功創建目錄,則無輸出。
????????//?msg?="成功創建目錄:?<B>"?+?dir.getAbsolutePath()?+?"</B>";
????????return?msg;
????}else?{
????//????msg?=?"錯誤原因:<BR>目錄<b>"?+?dir.getAbsolutePath()?+?"</b>已存在。";
????}
????return?msg;
}
String?getCurDate(){
????GregorianCalendar?gcDate?=?new?GregorianCalendar();?
????int?year??=?gcDate.get(GregorianCalendar.YEAR);
????int?month?=?gcDate.get(GregorianCalendar.MONTH);
????int?day???=?gcDate.get(GregorianCalendar.DAY_OF_MONTH);
????return?""+year+month+day;
}
%>?
<%
?String?msg?="";
?String?img=null;
?DiskFileUpload?fu?=?new?DiskFileUpload();
?//?設置允許用戶上傳文件大小,單位:字節
?fu.setSizeMax(10000000);
?//?maximum?size?that?will?be?stored?in?memory?
?//?設置最多只允許在內存中存儲的數據,單位:字節
?fu.setSizeThreshold(4096);
?//?設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
?fu.setRepositoryPath("/tmp");
?//開始讀取上傳信息
?List?fileItems?=?fu.parseRequest(request);
?//?依次處理每個上傳的文件
?Iterator?iter?=?fileItems.iterator();
?String?updir="/dbweb/upics/";
?String?updir2="/upics/";
?String?curdate=getCurDate();
?String?filepath?=?getServletContext().getRealPath(updir2)+"/"+curdate;//<---好象在tomcat下getrealpath有點問題
?String?opmsg?=?Mkdir(filepath);
?if(?opmsg?==?null)?{
?while?(iter.hasNext())?{
??FileItem?item?=?(FileItem)?iter.next();
??//忽略其他不是文件域的所有表單信息
??if?(!item.isFormField())?{
???String?name?=?item.getName();
???long?size?=?item.getSize();
???if((name==null||name.equals(""))?&&?size==0)
???continue;
????//?注意item.getName()
????//?會返回上載文件在客戶端的完整路徑名稱,這似乎是一個BUG。
????//?為解決這個問題,這里使用了fullFile.getName()。
????name=name.replace('\\','/');
????File?fullFile?=?new?File(name);?
????File?savedFile?=?new?File(filepath,fullFile.getName());
????item.write(savedFile);
????msg="<img?alt='"+fullFile.getName()+"'?src='"+updir+curdate+"/"+fullFile.getName()+"'?/>";
????img="<img?alt='"+fullFile.getName()+"'?src='"+updir+curdate+"/"+fullFile.getName()+"'?/>";
??}
?}
}//opmsg=null
%>
參考文獻:
1、用fileupload處理文件上傳
作者:◇ 劉冬 發文時間:2003.07.09 15:52:43 ,http://tech.ccidnet.com/pub/disp/Article?columnID=322&articleID=53966&pageNO=1
講得非常清楚
2、Jakarta Commons:巧用類和組件1 (2) 作者:Vikram Goyal 仙人掌工作室譯 ,http://www.uml.org.cn/j2ee/j2eeh2.htm
3、Jsp如何實現網頁的重定向 ,2002-05-16· ·包路躍··Yesky,http://www.yesky.com/SoftChannel/72342371945283584/20020424/1608521.shtml
4、判斷文件或文件夾是否存在,作者:羅會濤,http://www.fawcette.com/china/XmlFile.aspx?ID=205
5、java.util中的Date類,By Wing, 出處:處處,http://www.linuxaid.com.cn/articles/1/1/119413536.shtml
6、計算Java日期--學習怎樣創建和使用日期,作者:Robert Nielsen ,http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=497
總結
以上是生活随笔為你收集整理的利用apache-commons-fileupload写jsp上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: T-SQL 2 Tips: 1.计算任意
- 下一篇: 飞鸟和鱼的故事