利用apache-commons-fileupload寫jsp上傳檔案

來源:互聯網
上載者:User
利用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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.