




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
深入淺出叢書系列
EBS開發(fā)技術(shù)
系統(tǒng)間文件傳輸
系統(tǒng)間文件傳輸方案
Author:李蛟龍
CreationDate:2015-09-10
LastUpdated:2015-10-20
DocumentRef:<DocumentReferenceNumber>
Version:DRAFT1A
Approvals:
<Approver1>
〈Approver2>
CopyNumber
DocumentControl
ChangeRecord
DateAuthorVersionChangeReference
2015-10-20李蛟龍DraftlaNoPreviousDocument
Reviewers
NamePosiHon
Distribution
CopyNo.NameLocation
1LibraryMasterProjectLibrary
2ProjectManager
3
4
NoteToHolders:
Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyour
nameontheequivalentofthecoverpage,fordocumentcontrolpurposes.
Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefront
cover,fordocumentcontrolpurposes.
Contents
DocumentControlii
1.FTP文件傳輸2
1.1FTP概述2
1.2FTP搭建2
1.3Directory使用3
1.4FTP用法舉例4
1.5案例7
2.SFTP9
2.1FTP與SFTP9
2.2EBS中使用SFTP9
2.3用法舉例10
3.Webservice文件傳輸12
3.1Webservice數(shù)據(jù)傳輸12
3.2負(fù)載測試13
33用法舉例14
3OpenandClosedIssuesforthisDeliverable18
OpenIssues26
ClosedIssues26
1.FTP文件傳輸
這種系統(tǒng)間接口方式也比較常見,當(dāng)我們在應(yīng)用中需要使用服務(wù)來共享文件和傳遞文
件的時候,使用FTP方式比較合適。
1.1FTP概述
1.1.1FTP
FTP是FileTransferPrntnr.nl(文件傳輸協(xié)議)的英文簡稱,而中文簡稱為“文傳
協(xié)議”。用于Internet上的控制文件的雙向傳輸。
TCP/IP協(xié)議中,F(xiàn)TP標(biāo)準(zhǔn)命令TCP端口號為21,Port方式數(shù)據(jù)端口為200FTP的任務(wù)是從
一臺計算機(jī)將文件傳送到另一臺計算機(jī),不受操作系統(tǒng)的限制。
1.2FTP搭建
1.2.1FTP通用包
在項(xiàng)目上使用的大部分都是這個包,這個包把ftp傳輸文件要用到的函數(shù)都不封裝好
了,使用起來會更方便一些
CUX_ftp.pck
1.2.2測試FTP環(huán)境搭建
在這里我使用一個比較簡單的FTP搭建軟件來搭建一個FTP環(huán)境,這個軟件叫“簡單
FTP”,他只能有一個用戶,下載直接啟動就行了。
1.2.3連接測試
連接測試,代碼如下
DECLARE
l_conutl_tcp.connection;
BEGIN
l_con:=cux_ftp.login(p_host=>*192.168.0.Ill,,
p_port=>'21',
p_user=>'root’,
p_pass=>
'rootroot');
cux_ftp.logout(p_conn->l_con);
dbms_output.put_line('連接成功!1);
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line(,測試失敗:111SQLERRM);
END;
輸出內(nèi)容
220
331Passwordrequiredforroot.
230Userrootloggedin.
221Goodbye.
連接成功!
Directory使用
1.3.1directory路徑設(shè)置
一般倉J建directory都是為了用數(shù)據(jù)泵導(dǎo)入/導(dǎo)出數(shù)據(jù)用,在oracle中涉及文件的操作一
般都會用到directory,其實(shí)directory還有很多別的用處,本文不做闡述
1.3.2新建directory
語法:
CREATE[ORREPLACE]DIRECTORYdirectoryAS'pathname';
例如:
createorreplacedirectoryftp_tmpas'/honie/applmgr/ljl';
1.3.3查詢directory
select*fromdba_directories
1.3.4賦權(quán)
grantread,writeondirectorydump_dirtouserOl
1.3.5刪除
dropdirectorydump_dir
1.4FTP用法舉例
1.4.1上傳文件
測試代碼
DECLARE
Localvariableshere
ftp_connectionutl_tcp.connection;
vhostVARCHAR2(50):=110.10.10.1031;
192.168.(Till
v_portVARCHAR2(2):='21';
vuserVARCHAR2(50):='root*;
v_passvzordVARCHAR2(50):='rootroot';
v_filehandleutl_file.file_type;
v_directoryVARCHAR2(200)":='FTP_TMP';
vfilenameVARCHAR2(100):='TEST123.txt,;
BEGIN
―第一步,獲取ETP連接
BEGIN
ftp_connection:=cux_ftp.login(vhostz
v_port,v_user,v_password);
dbms_output.put_line('獲取FTP連接成功');
---亓始生成文件
v_filehandle:=utl_file.fopen(v_directory,
v_filename,*w');
utl_file.pu二(v_filehandle,'測試文件上傳');
utl_file.fflush(v_filehandle);
utl_file.fclose(v_filehandle);
dbms_output.put_line('文件創(chuàng)建成功,);
cux_ftp.put(p_conn>ftp_connection,
p_from_dir=>v_directory,
p_from_file=>v_filename,
p_to_file=>v_filename);
EXCEPTION
WHENOTHERSTHEN
dbms_output.pujline(,獲取連接失敗,||
SQLERRM);
ftpconnection:=NULL;
END;
END;
結(jié)果輸出
SQLOutputStatistics
]n==-1e
ClearBuffersize50000金SEnabled
220http://www.aq817.cn
331Passwordrequiredforroot.
230Userrootloggedin.
獲取FTP連接成功
文件創(chuàng)建成功
227EnteringPassiveMode(13,10,10,103,234,142).
150OpeningdataconnectionforTEST123.txt.
226Filereceivedok
syfdemo.m(1)x
/home/oracle/ljl
Name
二home_TEST123.txt
與j.oracle
Jo..
卜人Ijl
由mail
i+ioradiag.oracle
TEST123
文件(F)編聲(E)格式(O)查看(V)幫助(H)
廁試文件上傳
1.4.2下載文件
測試代碼
DECLARE
--Localvariableshere
ftp_rnnnpf:ticnuf1_trp.ccnnact*ion;
v_hostVARCHAR2(50):='10.10.10.1031;
v_portVARCHAR2(2):='21';
v_userVARCHAR2(50):='root';
v_passwordVARCHAR2(50):='rootroot';
v_filehandleutl_file.file_type;
vdirectoryVARCHAR2(200)-:=-FTPTMP1;
v_filenameVARCHAR2(100):='get二test.二xt';
BEGIN
第一步,獲取FEP連接
BEGIN
ftp_connection:=cux_ftp.login(v_host,
v_port,
vuser,
vpassword);
dbms_output.put_line(,獲取FTP連接成功,);
-一并始下載文件
cux_ftp.get(p_conn=>ftp_connection,
p_from_file=>v_filename,
p_to_dir=>v_directory,一下載到改目錄
p_to_file=>v_filename);
EXCEPTION-
WHENOTHERSTHEN
dEn5_output.put_line「獲取連接火敗,||
SQLERRM);
ftp_connection:=NULL;
END;
END;
結(jié)果
SQLoutputStatistics
ClearBuffersize50000:MEnabled
220
331Passwordrequiredforroot.
230Userrootloggedin.
獲取FTP連接成功
227EnteringPassiveMode(10,10,10,103,240,124).
150Openingdataconnectionforget_test.txt.
226Filesentok
syfdemo.ml.com(1)x
/home/oracle/ljl
Name
白Jhomei4運(yùn)Ti豆鼠;
B-oracle
,,get_test.txt
;&Ijl
ffi-mail
國jioradiag_oracle
1.4.3刪除文件
測試代碼
DECLARE
——Localvariableshere
ftp_connectionutl_tcp.connection;
v_hostVARCHAR2(50):=,10.10.10.1031;
v^portVARCHAR2(2;:-'21,;
v^userVARCHAR2(50):='root';
v_passwordVARCHAR2(50):='rootroot1;
v_filehandleutl_file.file_type;
v二filenameVARCHAR2(200)-:='TEST123.txt';
BEGIN
--第一步,獲取FTP連接
BEGIN
itp_connection:=cux_ftp.login(v_host,
v_port,
v_user,
v_password);
dbmsoutput.put」ine('獲取FTP連接成功');
--并始下載文件
cuxftp.delete(pconn=>ftpconnection,
p_file=>v_filename);
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line「獲取連接失敗,I|SQLERRMj;
ftp_connection:=NULL;
END;
END;
結(jié)果
SQLOutputStatistics
ClearBuffersize50000:Enabled
220
331Passwordrequiredforroot.
230Userrootloggedin.
獲取FTP連接成功
227EnteringPassiveMode(10,10,10,103,242,167).
250File17TEST123.txt1deleted.
系統(tǒng)建成■]?ftpjmp
M/SoftwareMyGames迅雷下0HostTNSHand.Training...漢兩項(xiàng)目開發(fā)漢兩項(xiàng)目文件FileRecv
文件
Ti>ftp_tmp
名稱修改日期類型大小
4工或Hgettest.txt2015/5/318:09TXT文件
?桌面
Q最近訪問的位■
AOneDrive
1.5案例
1.5.1簡單案例
簡單傳輸客戶信息的ftp案例
99
CUX_ftp.pckcux_aeb_interface_pub.pck
cux_aeb_customer_outbound_prg.pck
1.5.2成熟案例
在項(xiàng)目上使用比較FTP比較好的有日立項(xiàng)目,比較通用的平臺可以使用"TBU-HN-KM19
通用FTP接口平臺”,有需要的可以參考一下。
2.SFTP
SFTP是SecureFileTransferProtocol的縮寫,是安全文件傳送協(xié)議??梢詾閭鬏斘募?/p>
提供?種安全的加密方法。跟ftp幾乎語法功能一樣。
SFTP是SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。它本身沒有單獨(dú)
的守護(hù)進(jìn)程,必須使用sshd守護(hù)進(jìn)程來完成相應(yīng)的連接操作,所以從某種意義上來
說,SFTP并不像一個服務(wù)器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳
輸認(rèn)證信息和傳輸?shù)臄?shù)據(jù),所以使用SFTP是十分安全的。但由于這種傳輸方式使用了
加密/解密技術(shù),所以傳輸效率比普通的FTP要低得多。在對網(wǎng)絡(luò)安全性要求更高時,
代替FTP使用。
2.1FTP與SFTP
2.1.1區(qū)別
SFTP作為FTP的一種加強(qiáng)協(xié)議安全性,在文件傳輸?shù)臅r候更加的安全,因?yàn)檫@邊公司
是做的安全的,所以最后采用SFTP的方式來進(jìn)行數(shù)據(jù)文件的交互。
2.1.2優(yōu)缺點(diǎn)
SFTP傳輸效率會比FTP要低。默認(rèn)端口為22
2.2EBS中使用SFTP
2.2.1實(shí)現(xiàn)方式
使用JavaSource實(shí)現(xiàn)SFTP操作服務(wù)器文件:具體使用的是JSCHJavaLibrary
222JSCHJavaLibrary
JSCH是用java實(shí)現(xiàn)SSH功能的庫,JSCH是?個純粹的用java實(shí)現(xiàn)SSH功能的java
library.
官方地址為:http:〃/jsch/
2.2.3調(diào)用方式
調(diào)用JAVA程序時,常見的方式有把jar包load到數(shù)據(jù)庫中,在數(shù)據(jù)庫白通過函數(shù)的方式
調(diào)用JAVA方法;另外一種方式就是寫JAVA程序調(diào)用jar中的方法,再通過并發(fā)請求調(diào)
用客戶化的JAVA程序
2.2.4安裝
1.登陸到EBS服務(wù)器,
2.上傳SFTP文件夾里面的jzlib.jar和jsch-0.L45.jar到服務(wù)器路徑$HOME/instalI
3.執(zhí)行下面的命令
cdSUOME/install
loadjava-r-f-o-userapps/appsjzlib.jar
loadjava-r-f-o-userapps/appsjsch-0.1.45.jar
4.登陸到EBS數(shù)據(jù)庫,編譯SFTP文件夾里面程序:
XxfndSftp.jsp
xxfnd_sftp_utl.pck
xxfnd_sftp_utl.pckXxfndSftp.jsp
jsch-0.1.45.jarjzlib.jar
2.3用法舉例
2.3.1文件上傳
從本地數(shù)據(jù)庫服務(wù)器發(fā)送到目標(biāo)服務(wù)器
--uploadfile
BEGIN
--dbms_java.set_output(10000);--EnabledJavaOutput
xxfnd_sftp_utl.upload_file(host=>,03,,
port'22\
username'oratest',
password1oratest,,
sourcefile
'/hone/oratest/1j1/PopulateJsonData.javaI
destfile=>
*/home/oratest/java_int/I/PopulateJsonData.java');
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line(SQLERRM);
END;
2.3.2創(chuàng)建后上傳
現(xiàn)在本地服務(wù)器創(chuàng)建文件,創(chuàng)建完成后傳輸?shù)侥繕?biāo)服務(wù)器
--uploadfileanddata
BEGIN
--dbms_java.set_output(10000);—EnabledJavaOutput
xxfnd_sftp_utl.upload_file(host=>'031,
port=>'22',
username=>'oratest,,
password=>'oratest’,
sourcefile=>
'/home/oratest/1j1/1.txt',
destfile->
*/home/oratest/javaint/*,
data=>'SFTPTesting
@20140603');
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line(SQLERRM);
END;
2.3.2刪除本地文件
輸入本地文件路徑即可刪除
--deletelocalfile
BEGIN
--dbms_java.set_output(10000);一一EnabledJavaOutput
xxfnd_sftp_utl.delete_file(deletefile=>
'/hone/oratest/1j1/1.txt');
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line(SQLERRM);
END;
2.3.3刪除遠(yuǎn)程文件
輸入近程服務(wù)器地址信息及遠(yuǎn)程服務(wù)器文件路徑即可刪除
--deleteremovefile
BEGIN
一一dbms_java.set_output(10000);一一EnabledJavaOutput
xxfnd_sftp_utl.delete_file(host=>'192.168.0.2031,
port=>'22\
username=>'oratest,,
password=>'oratest,,
deletefile=、
*/hone/oratest/java_int/l.txt*);
EXCEPTION
WHENOTHERSTHEN
dbms_output.put_line(SQLERRM);
END;
3.Webscrvicc文件傳輸
Webservice在實(shí)際應(yīng)用中也可以用來傳輸文件,但傳輸文件的大小是有限制的,一般
不允許超過2M,其實(shí)Webservice也不太適合用來傳輸文件;Webservice傳輸文件的原
理也是把文件當(dāng)作數(shù)據(jù)傳輸
3.1Webservice數(shù)據(jù)傳輸
3.1.1限制
在實(shí)際使用Webscrvice時存在一些限制,最明顯的就是傳輸文件的大小,
utl_http.write_text程序一次傳輸數(shù)據(jù)量最大不超過32K,當(dāng)然在讀取Webservice數(shù)
據(jù)的時候,一次讀取的數(shù)據(jù)量也應(yīng)不超過32K
3.1.2發(fā)送大數(shù)據(jù)
在Mctlink上也為我們提供了發(fā)送CLQB大數(shù)據(jù)的方法
CREATEORREPLACEFUNCTIONhttp_post(urlVARCHAR2,
req_bodyCLOBjRETURN
VARCHAR2AS
buffersizeNUMBER(4):=2000;
chunk_bufferVARCHAR2(20000);
chunklengthNUMBER(4);
chunkoffsetNUMBER;
request_body_lengthNUMBER;
requtl_http.req;
resputl_http.resp;
v_response_textVARCHAR2(32767);
BEGIN
req:=utlhttp.beginrequest(url,
,POST',
sys.utl_http.http_version_l_l');
utlhttp.setheader(req,
*Content-Type',
*text/xml');
utl_http.set_header(req,
,Transfer-Encoding’,
*chunked*);
request_body_length:=dbms_lob.getlength(req_body);
chunk_offset:=1;
WHILE(chunk_offset<request_body_length)
LOOP一一一
IFchunk_offset+buffersize>=request_body_lengthTHEN
chunk_length:=request_body_length-chunk_offset+1;
ELSE
chunk_length:=buffersize;
ENDIF;-
dbms_lob.read(reqbody,
chunk_length,
chunkoffset,
chunk_buffer);
utl_http.write_text(req,
chunk_buffer);
chunk_offset:=chunk_offset+chunk_length;
ENDLOOP;
-Therequestisactuallymadewhentheget_responsecallis
made
—andfarLhissiiup工ecase,we?willexpecLthewtibsexvexLo
respondwith
--lessthan32K.SeeNote:1072214.1forexampleof
response>32k
resp:=utl_http.get_response(req);
utl_http.readtext(resp,
v_response_text,
32767);
utl_http.end_response(resp);
RETURNv_response_text;
END;
3.1.3實(shí)際應(yīng)用
在實(shí)際應(yīng)用中,如果用Wcbservice發(fā)送文件數(shù)據(jù)的話,也會影響系統(tǒng)性能,由于文件
數(shù)據(jù)量比較大,Webservice服務(wù)也會處在高負(fù)荷運(yùn)行情況下,這樣傳輸?shù)男室矔?/p>
打折扣
3.2負(fù)載測試
3.2.1問題
調(diào)用WS時,如果請求或響應(yīng)的XML數(shù)據(jù)量過大,會發(fā)生
java.lang.OutOfMemoryErrorfi<jSYSTEMERRORo如數(shù)據(jù)量過大,可以采用分批多
次調(diào)用的方式來實(shí)現(xiàn),每次調(diào)用WS傳輸?shù)腦ML大小最好不要超過2M。以下是個人測
試調(diào)用ISG發(fā)布的WS,隨著數(shù)據(jù)量的遞增WS響應(yīng)時間遞增的記錄
3.2.2測試環(huán)境
EBSR12.1.3環(huán)境,系統(tǒng)狀態(tài)處于空閑狀態(tài),網(wǎng)絡(luò)狀況良好。
OS:RedHatEnterpriseLinuxServerrelease5.6(Tikanga)64位
CPU:2*4核*2.13GHz
內(nèi)存:32G
3.2.3測試結(jié)果
在數(shù)據(jù)量接近20M的時候數(shù)據(jù)基本上無法傳輸,這個在山推項(xiàng)目上就出現(xiàn)這種情況
返回記錄數(shù)響應(yīng)文件大小響應(yīng)時間(單位:說明
秒)
130298K0.6WebService正常響應(yīng)
230594K1WebService正常響應(yīng)
3501M1.2WebService正常響應(yīng)
5301.5M1.5WebService正常響應(yīng)
7302M2WebService正常響應(yīng)
13002.9M2.7WebService正常響應(yīng)
15004.4M4WebService正常響應(yīng)
17205M4.6WebService正常響應(yīng)
23005.8M5.4WebService正常響應(yīng)
25007.2M6.5WebService正常響應(yīng)
33008.7M8.3WebService正常響應(yīng)
350010M10WebService正常響應(yīng)
430011.6M11WebService正常響應(yīng)
530014.5M14.7WebService正常響應(yīng)
630017.4M1950%WebService響應(yīng)發(fā)生
錯誤
3.3用法舉例
3.3.1實(shí)際應(yīng)用
這里用發(fā)送hr模塊人員圖片進(jìn)行測試,per_images表中image字段就存儲了BLOB類
型,Oracle中文件數(shù)據(jù)常見的存儲方式就是存到表里
DECLARE
l_soap_contentCLOB;
l_soap_content_endCLOB;
l_hULp_requLl_hLLp.req;
Ihttpresputlhttp.resp;
l_soap_respondCLOB;
1respxmlxmltype;
l_nanufacturer_xmlxmltype;
1jsondataVARCHAR2(32767);
l_lengthNUMBER;
l_picBLOB;
l_cpicCLOB;
l_buffersizeNUMBER:=2400;
l_chunk_bufferVARCHAR2(32767);
l_chunk_lengthNUMBER;
l_chunk_offsetNUMBER;
l_request_body_lengthNUMBER;
BEGIN一一
l_soap_content:='<soapenv:Envelope
xmlns:soapenv='*http://schemas.xmlsoap.org/soap/envelope/*'
xmlns:ws="http://ws.esb./M>
<soapenv:Header/〉
<soapenv:Body>
<ws:sendMessage><baseParams>{
'?clientcode":"EHR”,
"tradeCode":,,MGR002'\
"regSerialNo1':"10012”,
'?tradeTime'1:',2014-08-2101:23:13”,
"tradeDescription”:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAQI 244-2021室內(nèi)LED健康照明設(shè)計要求
- T/CAQI 21-2016廢水生物增強(qiáng)處理上流式一體化生物反應(yīng)器
- T/CANA 001-2020電子商務(wù)數(shù)權(quán)評價標(biāo)準(zhǔn)
- 在線刷java面試題及答案
- 丹陽小學(xué)面試題及答案
- 創(chuàng)新求變面試題及答案
- 印章使用借用管理制度
- T/CAEPI 31-2021旋轉(zhuǎn)式沸石吸附濃縮裝置技術(shù)要求
- 《春天來了》教學(xué)設(shè)計
- 木材機(jī)械出售轉(zhuǎn)讓協(xié)議書
- 2023-2024學(xué)年人教版八年級下冊數(shù)學(xué)期末復(fù)習(xí)試題
- 2024年地理中考重點(diǎn)綜合題答題模板
- 卒中中心宣教管理制度
- 2023年高考語文試卷及答案(浙江卷)
- 2023年一般行業(yè)安全負(fù)責(zé)人和安全員考試題庫
- 《水電水利工程施工監(jiān)理規(guī)范》
- 汽車租賃服務(wù)投標(biāo)方案(技術(shù)方案2)
- 工作場所有害因素職業(yè)接觸限值-第2部分-物理因素
- 普通家庭裝修預(yù)算表(全面細(xì)致)
- 畜牧業(yè)的動物福利與保護(hù)
- 售后常見問題以及處理方法分解課件
評論
0/150
提交評論