oracle中实现ftp文件上传下载_第1页
oracle中实现ftp文件上传下载_第2页
oracle中实现ftp文件上传下载_第3页
oracle中实现ftp文件上传下载_第4页
oracle中实现ftp文件上传下载_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、敲好最近有机会用到ftp发送接收文件,总结一下oracle里面ftp发送接收的方法。Java中可以使用.ftp.FtpCIient实现简单的ftp操作,这是在oracle数据库中有提供 api的。我个人觉得对于ftp的操作用java方式比较方便,代码简单容易懂而且广泛。不过oracle 中也有提供ftp访问的包UTL_TCP,通过这个包也可以很方便的实现 ftp操作。Java方式实现ftp客户端操作在oracle数据库中有提供 .ftp.FtpClient,所以可以直接使用该包完成简单的ftp操作在oracle数据库端。这里有个问题没有解决:ftp文件追加时候,发现没有提供 FtpClient

2、.append() 函数, 但是在一般的java程序中式可以使用,测试都是在 jdk1.4版本上进行的。还是在 oracle 里面这个功能不允许还是我没有找到append替代方法呢?createorreplacea ndcompilejavasource namedremoteFtpClie ntASpackage oracle.apps.zz.zzmes;importjava.io.BufferedReader;importjava.io.Data In putStream;importjava.io.File;importjava.i o.I OExcepti on;importjava.

3、i o.ln putStreamReader;importjava.io.Ra ndomAccessFile;importjava.io.FileI nputStream;importjava.util.Stri ngToke ni zer;imports un.n et.Te In et In putStream;imports un.n et.Te In etOutputStream;imports un.n et.ftp.FtpClie nt;imports un.n et.*;imports un.n et.ftp.*;/importorg.apache.*;/ mons.n et.f

4、tp.*;/ mons.n et.ftp.FTP.*;/ mons.n et.ftp.FTP.*;publicclass remoteFtpClientprivateStri nghost;privateStri nguser name;privateStri ngpassword;private FtpClientclient;public remoteFtpClient()Stri ngpassWord )public remoteFtpClient(String Host, String userName,this.host=Host;/ip 地址this.username=userNa

5、me; 用户名this.password= passWord ;/ 密码this.client= new FtpClient();public voidsetHost( String Host)host=Host;public voidsetUserName( String userName)user name=userName;public voidsetPassword( String pwd)password =pwd;*获取和远程ftp服务器的连接*/publicboolea ngetFtpC onnection()/client=new FtpCIient();tryclie nt.

6、ope nServer(host);clie nt.logi n( user name,password );/clie nt.ascii();clie nt.bi nary();/client.setConnectTimeout(6000 );/ 设置超时System.out.pri ntln ("logi nsucess");catch(IOExcepti on e)/TODO Auto -generated catch blocke.pri ntStackTrace();returnfalse ;returntrue ;/*关闭ftp连接*/public voidcl

7、oseConnection()if (client!= null )try clie nt.closeServer();catch(IOExcepti one) /TODO Auto -generated catch blocke.pri ntStackTrace();client= null ;/*实现ftp文件上传*parameters*fileName:文件名*se ndcon te nt :要发送的内容*path :上传的路径,路径为空则取登录ftp后的默认路径*return:成功返回true,失败返回false*/publicbooleansendXml2Ftp( String fi

8、leName, String sendContent, String path)tryif(path!= null )client.cd(path);/ 发现在数据库中不能使用 client.append(path);String lineSeparator=System.getProperty("line.separator");TelnetOutputStreamos=client.put(fileName);/ 创建一个新的文件或者覆盖/client.rename("index","wip");/ 重新命名文件名称/Teln e

9、tOutputStreamos=clie nt.appe nd(fileName);/os.write(se ndCo nte nt.getBytes("UTF-8");/os.write(se ndCo nten t.getBytes("GB2312");String en cod in g=System.getProperty("file.e ncodi ng");os.write(se ndConten t.getBytes(e ncodi ng);os.close();/clie nt.re name(arg0,arg1)/c

10、lient.sendServer("DELEwip.xml");/ 删除文件catch(IOExcepti on e)System.out.pri ntln ("i nsertarecordtoerrortable!");/TODO Auto -generated catch blocke.pri ntStackTrace();returnfalse ;returntrue ;publicstaticString replaceAllString( String str, String pattern. String replaces)StringBuf

11、fer result = new StringBuffer();StringTokenizerstrToken=new StringTokenizer(str,pattern);while (strToken.hasMoreTokens()result.append(String )strToken.nextToken();result.appe nd(replaces);return result.toString();实现ftp下载*parameters:*fileName:文件名称*path:文件路径*return:ftp 文件内容*/publicString loadXml2Temp(

12、 String fileName, String path)Teln et In putStreamfget;String xmlString= null ;String en cod in g=System.getProperty("file.e ncodi ng");String temp;tryif(path!= null )clie nt.cd(path);fget=clie nt.get(fileName);/InputStreamReaders= new InputStreamReader(fget,"GB2312");否则在中文时候会有乱码

13、/接收的字符集需要和要下载的文件最好字符集相同,InputStreamReaders= new InputStreamReader(fget,"UTF-8");BufferedReader in = new BufferedReader(s);StringBuffersb=new StringBuffer();while (temp=in.readLine()!=null )sb.appe nd(temp.trim();sb.appe nd("n");xmlStri ng=sb.toStri ng();s.close();catch(IOExcepti

14、on e)/TODO Auto -generated catch blocke.pri ntStackTrace();retur nn ull ;return xmlString;通过在另一个java存储过程调用以上的以上ftp存储过程,可以实现ftp文件的上传下载例如:createorreplacea ndcompilejavasource namedftpSe ndGetTest ASpackage oracle.apps.zz.zzmes;importjava.sql.Clob;importjava.sql.PreparedStateme nt;importjava.sql.Result

15、Set;importjava.sql.SQLExcepti on;importjava.util.Hashtable;importoracle.xml.sql.query.OracleXMLQuery;importjava.io.*;imports un.n et.ftp.FtpClie nt;importoracle.sql.*;importoracle.jdbc.OracleDriver;importjava.sql.C onnection;publicclass ftpSendGetTest/实现ftp下载,并转换为xml文件格式并返回clob publicstaticCLOB getX

16、ml( String host, String user name. String pwd, String fileName, Stri ng path)String xml=""CLOBtempClob= null ;/ftp类构造remoteFtpClientfc=new remoteFtpClient(host,username,pwd);if(fc.getFtpConnection()/ 连接ftpxml=fc.loadXml2Temp(fileName,path);/ 调用下载函数if(xml!= null )try / 实现String 转换为 clobConn

17、ectionconn= new OracleDriver().defaultConnection();tempClob=CLOB.createTemporary(conn,true ,CLOB.DURATION_SESSION);tempClob.ope n(CLOB.MODE_READWRITE);WritertempClobWriter=tempClob.getCharacterOutputStream();tempClobWriter.write(xml);tempClobWriter.flush();tempClobWriter.close();tempClob.close();con

18、n .close();catch(SQLExceptio ne)/TODO Auto -generated catch blocke.pri ntStackTrace();catch(IOExcepti on e)/TODO Auto -generated catch blocke.pri ntStackTrace();fc.closeConnection();/ 关闭 ftp 连接return tempCIob;/发送数据到ftppublicstaticStri ngsen dxml( String host, String user name. String pwd. String fil

19、eName, String path, String content)String b="N"remoteFtpClientfc= new remoteFtpClient(host,username,pwd);if(fc.getFtpConnection()/ 连接ftpif (fc.sendXml2Ftp(fileName,content,path)/ 发送文件b="Y"fc.closeConnection();/ 关闭 ftp 连接return b;Pl/sql中实现ftp客户端操作在oracle中提供了数据库包 SYS.utl_tcp实现客户端操作

20、。ftp操作详细的可以查看该package.举例一个简单的ftp上传下载程序。ftp连接FUNCTION login(p_host INVARCHAR2 ,p_port INVARCHAR2 ,/ftp 端口 21p_user INVARCHAR2 ,p_pass INVARCHAR2 ,p_timeout INNUMBER := NULL )RETURN UTL_TCP.connection ISl_connU TL_TCP.c onn ectio n;BEGIN l_conn:=UTL_TCP.ope n_connection( p_host,p_port,tx_timeout=>p

21、_timeout); get_reply(l_c onn);send_command(l_conn,'USER' |p_user);send_command(l_conn,'PASS' |p_pass);RETURN l_conn;END ;ftp关闭连接PROCEDURE logout(p_connINOUTNOCOPY UTL_TCP.connection,p_reply INBOOLEAN := TRUE)AS l_replyt_stri ng_table:=t_stri ng_table();BEGINsend_command(p_conn,'Q

22、UIT' ,l_reply);UTL_TCP.close_c onnection(p_conn);END ;ftp下载FUNCTION get_remote_data(p_connINOUTNOCOPY UTL_TCP.co nn ectio n.p_file INVARCHAR2 )RETURNCLOBIS l_connU TL_TCP.c onn ectio n;l_amount PLS_INTEGER;l_buffer VARCHAR2 (32767 );l_data CLOB ;BEGINDBMS_LOB.createtemporary(lob_loc=>l_data,

23、cache=> TRUE,dur=>DBMS_LOB.call);l_conn:=get_passive(p_c onn);send_command(p_conn,'RETR' |p_file, TRUE);BEGINLOOP32767 );l_amou nt:=UTL_TCP.read_text(l_co nn ,l_buffer,DBMS_LOB.write appe nd(l_data,l_amou nt,l_buffer); ENDLOOP ;EXCEPTIONWHEN UTL_TCP.END_OF_INPUT THENNULL ;WHENOTHERSTHENNULL ;END ;UTL_TCP.close_c onn ectio n(l_c onn);RE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论