監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
OA系統(tǒng)二次開發(fā)

當前位置:工程項目OA系統(tǒng) > 泛普服務(wù)體系 > OA系統(tǒng)二次開發(fā)

泛普協(xié)同OA辦公底層包開發(fā)指南

申請免費試用、咨詢電話:400-8352-114

 
1.     引言... 4
1.1       概述... 4
1.2       定義... 4
2.     底層包應(yīng)用及范例... 4
2.1       最基本的繼承類... 4
2.2       怎樣記錄日志... 5
2.3       怎樣獲取屬性文件的值... 8
2.4       怎樣獲取系統(tǒng)的運行目錄... 10
2.5       怎樣訪問和運行數(shù)據(jù)庫腳本... 11
2.6       如何上傳一個文件... 15
2.7       如何訪問已經(jīng)上傳的文件... 19
2.8       如何使用緩存提高系統(tǒng)效率... 20
2.9       其它底層類基本方法... 29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

1.    引言

 

1.1      概述

 
本文檔為泛普協(xié)同OA商務(wù)系統(tǒng)(泛普OA系統(tǒng))程序員開發(fā)指導文檔,講述了開發(fā)底層工具包的應(yīng)用,常用功能的開發(fā)。
 
 

2.    底層包應(yīng)用及范例

 
本章對泛普OA系統(tǒng)   OA系統(tǒng)的底層工具包進行講解,開發(fā)人員可以從這里學到怎樣利用底層的工具包進行開發(fā)
 
 

2.1      最基本的繼承類

 
泛普OA管理系統(tǒng)中每一個java bean 都需要繼承 泛普OA系統(tǒng).general.BaseBean 類 。這個類實現(xiàn)了記錄日志和獲取屬性文件值的方法。繼承這兩個類的其它類可直接應(yīng)用這些方法來記錄日志,獲取屬性文件某一個屬性的值。方法的實現(xiàn)見后面的例子。
繼承的例子如下:
 
java bean 的繼承
 
public class ResourceComInfo extends BaseBean {
 
       public void doSomething() {          //某一個方法
              方法的處理………
              writeLog(s) ;       // 寫日志
       }
}
 
 
 
 
 
 
 
 

2.2      泛普OA辦公系統(tǒng)怎樣記錄日志

 
繼承了泛普OA系統(tǒng).general.BaseBean  ,可以直接使用 writeLog方法記錄日志信息。注意這里是使用,而不是調(diào)用,因為這個方法是這兩個被繼承類中的方法。
 
注意writeLog 方法的使用:
/**
* 將某個對象寫入Log文件
* @param obj 被寫入的對象
*/
  public void writeLog(Object obj)
 
我們看到,可以被記入日志的是任意一個java對象。這些java對象將被自動轉(zhuǎn)換成字符串對象(String)記入到日志文件中。日志文件將每天生成一個,以日志文件名稱中的日期來區(qū)別,比如:泛普OA系統(tǒng)_20030812.log,代表2003年8月12日的日志。當天的日志為泛普OA系統(tǒng).log。每一條日志的記錄格式為 :
YYYY.MM.DD-HH:MM:SS 記錄日志的類名 – 日志信息
比如:
2003.03.11-06:52:05 泛普OA系統(tǒng).datacenter.OutReportResult - sql is  select ROUND(sum(F_sksr),5) from T_yyrb A , CRM_CustomerInfo where  CRM_CustomerInfo.id=A.crmid  and CRM_CustomerInfo.id in(5)  and A.reportdate >= '2004-01-10'  and A.reportdate <= '2004-03-10'  and A.inputstatus >= '0' and A.inputstatus<>'9'  and A.modtype='0'
 
日志的記錄有兩種模式,第一種為調(diào)試模式,第二種為在線模式。在第一種模式下,所有的java對象都會記錄到日志文件中,包括調(diào)試信息,在第二種模式下,只有為Exception (異常)的對象才會記錄到日志文件中。模式的設(shè)置在/泛普OA系統(tǒng)/WEB-INF/ log4jinit.properties 屬性文件中的log4j.rootLogger 屬性來指定,如下:
 
log4j.rootLogger = INFO,A2
 
#if you want to open the trace from open source,just add   #  ahead of line
log4j.logger.org = ERROR
log4j.logger.uk = ERROR
 
 
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.DatePattern='_'yyyyMMdd'.log'
#don't modify the file property
log4j.appender.A2.File=@泛普OA系統(tǒng)
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c  - %m%n
上面的日志表明將所有的信息答應(yīng)到文件日志文件中 ,其中日志的模式為:
#FATAL 0
#ERROR 3
#WARN 4  只有WARN,ERROR,FATAL輸出
#INFO 6   所有的log都輸出
#DEBUG 7
記錄日志的例子如下:
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
try{
   
業(yè)務(wù)處理過程……….
 
String debugInfo = "This is test" ;
// 在調(diào)試模式下將會記入日志文件
                        writeLog("debug info is "+ debugInfo) ;          
                 }
                 catch(Exception e) {
                     // 在任何模式下出現(xiàn)異常,都將會記入日志文件
                      writeLog(e) ;
                      throw e ;
                 }
}
}
 
記錄的日志文件形式為:
 
2007-10-15 16:51:50,125  DEBUG  泛普OA系統(tǒng).hrm.resource. ResourceComInfo - debug info is This is test
 
如果有異常,將會記錄為:
2007-10-15 16:51:50,125  ERROR  泛普OA系統(tǒng).hrm.resource. ResourceComInfo - java.sql.SQLException: [Microsoft][SQLServer JDBC Driver][SQLServer]形式參數(shù) '@id_1' 定義為 OUTPUT,但實際參數(shù)卻未聲明為 OUTPUT。
       at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
       at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
       at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
       at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
       at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
       at 泛普OA系統(tǒng).conn.RecordSet.executeProc(RecordSet.java:155)
       at 泛普OA系統(tǒng).conn.RecordSet.executeProc(RecordSet.java:109)
       at 泛普OA系統(tǒng).hrm.resource. ResourceComInfo (ResourceComInfo.java:59)
       at com.caucho.jsp.JavaPage.service(JavaPage.java:87)
       at com.caucho.jsp.JavaPage.subservice(JavaPage.java:81)
       at com.caucho.jsp.Page.service(Page.java:410)
       at com.caucho.server.http.Invocation.service(Invocation.java:319)
       at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:333)
       at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:266)
       at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
       at java.lang.Thread.run(Thread.java:484)
 
從上面的日志信息,可以看到ResourceComInfo類的59行代碼運行的時候出現(xiàn)錯誤,這個錯誤是執(zhí)行數(shù)據(jù)庫操作的腳本錯誤,具體的錯誤信息是:形式參數(shù) '@id_1' 定義為 OUTPUT,但實際參數(shù)卻未聲明為 OUTPUT。說明調(diào)用數(shù)據(jù)庫腳本的時候參數(shù)的數(shù)量有出入。
 開發(fā)過程中請將日志級別設(shè)置為INFO,通過日志可檢查程序在哪里出錯了。

2.3      泛普辦公平臺怎樣獲取屬性文件的值

 
繼承了泛普OA系統(tǒng).general.BaseBean  的類,可以直接使用getPropValue方法獲取屬性文件的值。注意這里是使用,而不是調(diào)用,因為這個方法是這兩個被繼承類中的方法。
 
注意getPropValue方法的使用:
/**
* 從配置文件中獲取某個屬性的值
* @param fname 屬性文件名稱
* @param key 值
* @return String 屬性值
*/
  public String getPropValue(String fname , String key)
 
getPropValue 方法指定了從某一個屬性文件fname 中獲取鍵值key 的值。
 
這里的屬性文件必須存放在系統(tǒng)運行目錄下的WEB-INF/prop 目錄下,文件名稱為參數(shù)fname指定的文件名,不包括屬性文件的后綴名,屬性文件的后綴名必須為 .properties。
 
比如:
系統(tǒng)的運行目錄為 d:泛普OA系統(tǒng),那么屬性文件必須放在d:泛普OA系統(tǒng)WEB-INFprop 目錄下,取名為 thefilename.properties ,其中thefilename是任意的。
 
在屬性文件中某一個鍵值的值用等號來賦值,等號后面的值必須放在一行,如果一行不夠?qū)懀ɑ蛘邽榱瞬榭吹姆奖悖?,可以? 來鏈接多行。否則其它行的值不能被鍵值取得。等號左右都可以有空格,對鍵值和鍵值的值沒有影響。
 
比如 :
thekeyname = thevalue
 
將鍵值的值放到多行:
thekeyname = thevalue1
              thevalue2
              thevalue3
              thevalue4                   
這時候thekeyname 的值為thevalue1thevalue2thevalue3 ,thevalue4 取不到,因為thevalue3后面沒有
 
在程序中要取得上述屬性文件中鍵值thekeyname的值,使用方法:
 
getPropValue(“thefilename” , “thekeyname”) ;
 
 
 
獲取屬性文件的值的例子如下:
 
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
業(yè)務(wù)處理過程……….
 
String keyValue = getPropValue(“thefilename” , “thekeyname”) ;
 
// 將鍵值thekeyname的值keyValue記入日志文件
                writeLog("keyvalue is "+ keyValue) ;          
                
}
}
 
系統(tǒng)的主屬性文件 泛普OA系統(tǒng).properties 的文件名“泛普OA系統(tǒng)” 作為系統(tǒng)常量放在泛普OA系統(tǒng).general.GCONST 類中,可以使用getConfigFile() 方法來返回 “泛普OA系統(tǒng) ”,在編程的過程中,如果需要用到泛普OA系統(tǒng).properties屬性文件中的鍵值,請用GCONST. getConfigFile() 來獲取,當主屬性文件名稱因為需要改變得時候,不必改變所有用到這個屬性文件的類,只需要改變GCONST類中常量的值
 
 

2.4      泛普OA系統(tǒng)怎樣獲取系統(tǒng)的運行目錄

 
泛普OA系統(tǒng).general.GCONST 類提供了一個靜態(tài)方法getRootPath() ,返回系統(tǒng)的運行目錄,比如系統(tǒng)的運行目錄為d 盤的泛普OA系統(tǒng)目錄,將返回d:泛普OA系統(tǒng)
 
獲取系統(tǒng)的運行目錄的例子如下:
 
public class TestBean extends BaseBean {
      
       import 泛普OA系統(tǒng).general.GCONST ;
 
public void getSysRunPath(){
   
String sysRunPath = GCONST. GetRootPath() ;
 
// 將系統(tǒng)的運行目錄sysRunPath的值記入日志文件
                writeLog("sysRunPath is "+ sysRunPath) ;        
                
}
}

2.5      泛普OA軟件怎樣訪問和運行數(shù)據(jù)庫腳本

 
在泛普OA系統(tǒng)系統(tǒng)中,大量的數(shù)據(jù)庫訪問,鏈接的建立和持續(xù)性,事務(wù)的處理,鏈接池的維護等問題都被封裝在泛普OA系統(tǒng).conn 包下面的各個類中,應(yīng)用程序的實現(xiàn)者不需要去關(guān)心這些問題,而只需要調(diào)用泛普OA系統(tǒng).conn.RecordSet 類來執(zhí)行各種數(shù)據(jù)庫操作。
 
泛普OA系統(tǒng).conn.RecordSet 類實現(xiàn)了從數(shù)據(jù)庫鏈接池中獲取鏈接,執(zhí)行指定的數(shù)據(jù)庫腳本或者存儲過程,并在腳本或者存儲過程執(zhí)行完畢后將鏈接及時地歸還到鏈接池中。
 
泛普OA系統(tǒng)系統(tǒng)的鏈接池管理請參見 泛普OA系統(tǒng).conn.ConnectionPool , 泛普OA系統(tǒng).conn.DBConnectionPool ,泛普OA系統(tǒng).conn.ConnCheckerTimer 類的API 文檔,泛普OA系統(tǒng).conn.ConnectionPool 用于管理泛普OA系統(tǒng)系統(tǒng)中的所有數(shù)據(jù)庫鏈接池(泛普OA系統(tǒng)系統(tǒng)可以同時鏈接多個數(shù)據(jù)庫,每一個數(shù)據(jù)庫均有一個對應(yīng)的數(shù)據(jù)庫鏈接池,由泛普OA系統(tǒng).conn.DBConnectionPool負責管理,而泛普OA系統(tǒng).conn.ConnectionPool則是這些鏈接池的大管家,負責所有鏈接池的協(xié)調(diào)和統(tǒng)一對外接口),泛普OA系統(tǒng).conn.DBConnectionPool用于建立和管理對某一個數(shù)據(jù)庫的鏈接池,泛普OA系統(tǒng).conn.ConnCheckerTimer用于監(jiān)控各個鏈接池的狀況,定期對數(shù)據(jù)庫鏈接池中不符合要求的鏈接進行清理,并監(jiān)視是否需要在某一鏈接池中建立新的鏈接。
 
調(diào)用泛普OA系統(tǒng).conn.RecordSet,實現(xiàn)對數(shù)據(jù)的操作,下面進行詳細的說明:
 
泛普OA系統(tǒng).conn.RecordSet類采用 java.sql 中的 CallableStatement 和 Statement 執(zhí)行數(shù)據(jù)庫操作。客戶端直接調(diào)用該類進行數(shù)據(jù)庫操作。不需要考慮數(shù)據(jù)庫鏈接的建立。其中客戶端指所有調(diào)用該類進行數(shù)據(jù)庫操作的應(yīng)用程序,不特指用戶的客戶端。
 
RecordSet 執(zhí)行數(shù)據(jù)庫操作有兩種形式,一種為調(diào)用存儲過程,另一種為直接執(zhí)行SQL語句。與ConnStatement不同 ,RecordSet 執(zhí)行SQL語句不分查詢和修改,都在一條語句中執(zhí)行。RecordSet執(zhí)行腳本的方式如下:
 
1、使用默認的鏈接池執(zhí)行SQL語句:  
RecordSet rs = new RecordSet() ;
rs.executeSql(" select * from TB_Example ") ;
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
在JSP頁面中,可以通過以下方式應(yīng)用
<%@ page import="泛普OA系統(tǒng).general.Util" %>
<%@ page import="泛普OA系統(tǒng).conn.*" %>
<%@ page import="java.util.*,java.sql.Timestamp" %>
<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ include file="/systeminfo/init.jsp" %>
<jsp:useBean id="rs" class="泛普OA系統(tǒng).conn.RecordSet" scope="page" />
<%rs.execute(“”);   //執(zhí)行SQL語句
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
 
rs. executeProc (“存儲過程名稱”,para);   //執(zhí)行存儲過程
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
 
 
%>
 
2、使用指定的鏈接池泛普OA系統(tǒng)test執(zhí)行SQL語句
RecordSet rs = new RecordSet() ;
rs.executeSql(" update TB_Example set name = 'the new value' " , "泛普OA系統(tǒng)test" ) ;
 
 
 3、使用指定的鏈接池泛普OA系統(tǒng)test執(zhí)行存儲過程 PD_Example_UpdateById
存儲過程PD_Example_UpdateById 如下:
CREATE  PROCEDURE [PD_Example_UpdateById]
                       (@name      varchar(100),
                        @id   int,
                        @flag integer output,
                        @msg varchar(80) output)
                   AS
                   update TB_Example set name = @name where id = @id
 
GO
 
 
RecordSet rs = new RecordSet() ;
 
String newname = ....... ;
String id = ...... ;
String procpara = newname + Util.getSeparator() + id ;
rs.executeProc( "PD_Example_UpdateById" , procpara , "泛普OA系統(tǒng)test" ) ;
 
procpara 是存儲過程的參數(shù)值組成的字符串變量,多個參數(shù)值之間用 泛普OA系統(tǒng).general.Util.getSeparator() 分開
 
 
4、在一個客戶程序多個執(zhí)行之間,查詢結(jié)果可以保留到下一次查詢
RecordSet rs = new RecordSet() ;
rs.executeSql(" select * from TB_Example ") ;
rs.executeSql(" update TB_Example set name = 'the new value '") ;
while( rs.next() ) {
String thename = rs.getString("name") ;  //得到修改前查詢的值
其它處理代碼....…….
}
 
rs.executeSql(" select * from TB_Example ") ;
while( rs.next() ) {
String thename = rs.getString("name") ;  //得到修改后查詢的值
其它處理代碼....……
 }
 
訪問和運行數(shù)據(jù)庫腳本的例子:
 
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
業(yè)務(wù)處理過程……….
 
String sqlStr = “select * from Hrmresorce” ;
RecordSet rt = new RecordSet() ;
rt.executeSql(sqlStr) ;
while(rt.next()){
        String id = Util.null2String(rt.getString("id"));
        String loginid = Util.null2String(rt.getString("loginid"));
        String lastname = Util.null2String(rt.getString("lastname"));
        // 將數(shù)據(jù)庫的值記入日志文件
                        writeLog("id is "+ id) ;   
        writeLog("loginid is "+ loginid) ;
        writeLog("lastname is "+ lastname) ;      
}
                
}
}
 
 
 
 
其它關(guān)于系統(tǒng)數(shù)據(jù)庫信息的管理
 
a)、泛普OA系統(tǒng).conn.ConnectionPool 類的管理和設(shè)置:
 
所有的數(shù)據(jù)庫鏈接池的集合,用鏈接池名稱區(qū)別每一個鏈接池.支持對一個或多個由屬性文件定義的數(shù)據(jù)庫連接池的訪問.客戶程序可以調(diào)用getInstance()方法訪問本類的唯一實例。
 
對于一個鏈接池集合來說,可以有多個鏈接池,分別鏈接不同的數(shù)據(jù)庫。應(yīng)用程序指定鏈接池的名稱來調(diào)用不同的鏈接池。如果應(yīng)用程序沒有指定鏈接池的名稱,將使用默認的鏈接池。默認鏈接池的指定有兩種方式:
 
1、在Application Server設(shè)置的初始參數(shù)serverName的值 ,以Resin 為例:
<servlet servlet-name='InitServer' servlet-class='泛普OA系統(tǒng).general.InitServer'>
      <init-param serverName='泛普OA系統(tǒng)'/>
<load-on-startup/>
</servlet>
 
2、如果Application Server沒有相應(yīng)設(shè)置,則系統(tǒng)使用屬性文件(泛普OA系統(tǒng).properties)中設(shè)置的默認鏈接池名稱:
DefaultPoolName = 泛普OA系統(tǒng)
 
對于所有的鏈接池,系統(tǒng)需要加載相應(yīng)的 JDBC Driver來建立與相應(yīng)數(shù)據(jù)庫的鏈接。這些 Driver 在屬性文件(泛普OA系統(tǒng).properties)中指定,多個Driver中間用空格隔開:
DriverClasses = com.microsoft.jdbc.sqlserver.SQLServerDriver
 
對于每一個鏈接池需要用到的參數(shù)在屬性文件(泛普OA系統(tǒng).properties)中指定,屬性文件中參數(shù)的名稱以鏈接池的名稱開頭,中間加入小數(shù)點,比如鏈接池 泛普OA系統(tǒng) 的參數(shù)指定為 :
 
泛普OA系統(tǒng).url = jdbc:microsoft:sqlserver://10.1.1.205:1433;DatabaseName=泛普OA系統(tǒng)    //db url
泛普OA系統(tǒng).user = sa                                                                     //db user name       
泛普OA系統(tǒng).password = 123456                                                        //db user password
泛普OA系統(tǒng).charset = ISO_1                                                          //db encode          
泛普OA系統(tǒng).maxconn = 10                                                             //max conn in conn pool
泛普OA系統(tǒng).minconn = 2                                                              //min conn in conn pool
泛普OA系統(tǒng).maxusecount = 30              //the max use times of a conn           
泛普OA系統(tǒng).maxidletime = 30            //the max unuse time of a conn (分)
泛普OA系統(tǒng).maxalivetime = 2            //一個鏈接被調(diào)用后的最大未歸回時間 (分)
泛普OA系統(tǒng).checktime = 500                                                          //檢查的頻率 (秒)
 
 
 
b)、泛普OA系統(tǒng).conn. DBConnectionPool類的管理和設(shè)置:
 
數(shù)據(jù)庫鏈接池,所有創(chuàng)建的鏈接存放在鏈接池中,在客戶端鏈接數(shù)據(jù)庫時從鏈接池中取出鏈接,客戶端在完成數(shù)據(jù)庫操作后將鏈接返回鏈接池。
 
               
鏈接池創(chuàng)建鏈接需要用到的參數(shù)在屬性文件(泛普OA系統(tǒng).properties)中指定,屬性文件中參數(shù)的名稱以鏈接池的名稱開頭,中間加入小數(shù)點,比如鏈接池 泛普OA系統(tǒng) 的參數(shù)指定為 :
 
泛普OA系統(tǒng).url = jdbc:microsoft:sqlserver://10.1.1.205:1433;DatabaseName=AIS2002    //db url
泛普OA系統(tǒng).user = sa                                                                     //db user name       
泛普OA系統(tǒng).password = 123456                                                        //db user password
泛普OA系統(tǒng).charset = ISO_1                                                          //db encode          
泛普OA系統(tǒng).maxconn = 10                                                             //max conn in conn pool
泛普OA系統(tǒng).minconn = 2                                                              //min conn in conn pool
泛普OA系統(tǒng).maxusecount = 30              //the max use times of a conn           
泛普OA系統(tǒng).maxidletime = 30            //the max unuse time of a conn (分)
泛普OA系統(tǒng).maxalivetime = 2            //一個鏈接被調(diào)用后的最大未歸回時間 (分)
泛普OA系統(tǒng).checktime = 500                                                          //檢查的頻率 (秒)
 
 
 

2.6      泛普OA辦公如何上傳一個文件

 
上傳一個文件只需要調(diào)用泛普OA系統(tǒng).file.FileUpload 類。泛普OA系統(tǒng).file.FileUpload 類支持各種文件格式的上傳,也支持多文件的上傳。
 
B/S 架構(gòu)的文件上傳采用的是multipart/form-data 協(xié)議,而不是HTTP協(xié)議,采用這種協(xié)議上傳的數(shù)據(jù)必須通過特殊的處理,而不能用常規(guī)的方法來獲取,否則不能得到數(shù)據(jù)。泛普OA系統(tǒng).file.FileUpload 封裝了底層處理的代碼,應(yīng)用程序的實現(xiàn)者不需要關(guān)心這些細節(jié)!
 
泛普OA系統(tǒng).file.FileUpload上傳數(shù)據(jù)的方法有:
 
/**
* 進行上傳一個文件的操作
* @param uploadname  需要上傳的文件字段名稱
* @return String   返回保存文件信息的imagefileid
*/
public String uploadFiles(String uploadname)
 
 
/**
* 進行上傳一個文件的操作
* @param uploadnames需要上傳的多個文件字段名稱
* @return String[]   返回保存多個文件信息的imagefileid數(shù)組
*/
public String[] uploadFiles(String[] uploadnames)
 
 
這里,需要注意兩點,一個是傳給uploadFiles 方法的參數(shù), 是上傳文件字段的名稱,而不是文件的名稱(這個時候你并不知道文件的名稱)。比如在jsp 或者html頁面中文件瀏覽的字段代碼為:
<input type=file size=70 name="accessory1">
那么這里的文件字段的名稱為"accessory1"。  第二點是這個方法返回的信息是保存在數(shù)據(jù)庫表 ImageFile 中關(guān)于這個文件信息的鍵值imagefileid ,這個表的結(jié)構(gòu)如下:
Column(s) of "ImageFile" Table
Name Datatype Null Option Comment
imagefileid int NOT NULL 文件id
imagefilename varchar(200) NULL 文件名稱
imagefiletype varchar(50) NULL 文件MIME類型
filerealpath varchar(255) NULL 文件存放目錄
imagefileused int NULL 文件使用次數(shù)
iszip char(1) NULL 是否壓縮
0:否
1:是
isencrypt char(1) NULL 是否加密
0:否
1:是
imagefile image NULL 文件(存在在數(shù)據(jù)庫中的文件內(nèi)容,現(xiàn)已不使用)
 
從表結(jié)構(gòu)可以看出,我們得到了某一個文件信息的imagefileid,就可以從該表中得到相應(yīng)的文件名稱(這里指文件的實際名稱,比如test.doc), 文件MIME類型(比如 txt,doc,gif等) ,文件存放目錄(這里指在服務(wù)器中存放的實際路徑信息,包括實際存放的文件名稱,比如 e:泛普OA系統(tǒng)filesystem2003