利用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