2022年oracle中实现ftp文件上传下载.doc

上传人:de****x 文档编号:82371343 上传时间:2023-03-24 格式:DOC 页数:8 大小:47KB
返回 下载 相关 举报
2022年oracle中实现ftp文件上传下载.doc_第1页
第1页 / 共8页
2022年oracle中实现ftp文件上传下载.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《2022年oracle中实现ftp文件上传下载.doc》由会员分享,可在线阅读,更多相关《2022年oracle中实现ftp文件上传下载.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、敲好最近有时机用到ftp发送接收文件,总结一下oracle里面ftp发送接收的方法。Java中能够使用sun.ftp.FtpClient实现简单的ftp操作,这是在oracle数据库中有提供api的。我个人觉得关于ftp的操作用java方式比拟方便,代码简单容易明白而且广泛。不过oracle中也有提供ftp访咨询的包 UTL_TCP,通过这个包也能够非常方便的实现ftp操作。Java方式实现ftp客户端操作在oracle数据库中有提供 sun.ftp.FtpClient ,因此能够直截了当使用该包完成简单的ftp操作在oracle数据库端。这里有个咨询题没有处理:ftp文件追加时候,发觉没有提

2、供FtpClient.append()函数,但是在一般的java程序中式能够使用,测试都是在jdk1.4版本上进展的。依然在oracle里面这个功能不同意依然我没有找到append替代方法呢?create or replace and compile java source named remoteFtpClient ASpackage oracle.apps.zz.zzmes;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.File;import java.io.IOException;i

3、mport java.io.InputStreamReader;import java.io.RandomAccessFile;import java.io.FileInputStream;import java.util.StringTokenizer;import sun.TelnetInputStream;import sun.TelnetOutputStream;import sun.ftp.FtpClient;import sun.*; import sun.ftp.*;/import org.apache.*;/import org.apachemons.ftp.*;/import

4、 org.apachemons.ftp.FTP.*;/import org.apachemons.ftp.FTP.*;public class remoteFtpClient private String host; private String username; private String password; private FtpClient client; public remoteFtpClient() public remoteFtpClient(String Host, String userName,String passWord) this.host= Host;/ ip

5、地址 this.username=userName;/用户名 this.password=passWord;/密码 this.client = new FtpClient(); public void setHost(String Host) host=Host; public void setUserName(String userName) username=userName; public void setPassword(String pwd) password=pwd; /* * 获取和远程ftp效劳器的连接 */ public boolean getFtpConnection( )

6、 /client = new FtpClient(); try client.openServer(host); client.login(username,password); /client.ascii(); client.binary(); / client.setConnectTimeout(6000); /设置超时 System.out.println(login sucess); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); return false; return true

7、; /* * 关闭ftp连接 */ public void closeConnection() if (client != null) try client.closeServer(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); client = null; /* * 实现ftp文件上传 * parameters * fileName: 文件名 * sendcontent:要发送的内容 * path:上传的途径,途径为空则取登录ftp后的默认途径 * return: 成功返回 tru

8、e,失败返回false */ public boolean sendXml2Ftp(String fileName,String sendContent,String path) try if(path !=null) client.cd(path); /发如今数据库中不能使用client.append(path); String lineSeparator =System.getProperty(line.separator); TelnetOutputStream os = client.put(fileName); /创立一个新的文件或者覆盖 / client.rename(index,

9、 wip); /重新命名文件名称 /TelnetOutputStream os = client.append(fileName); / os.write(sendContent.getBytes(UTF-8); /os.write(sendContent.getBytes(GB2312); String encoding = System.getProperty(file.encoding); os.write(sendContent.getBytes(encoding); os.close(); / client.rename(arg0, arg1) /client.sendServer(

10、DELE wip.xml ); /删除文件 catch (IOException e) System.out.println(insert a record to error table!); / TODO Auto-generated catch block e.printStackTrace(); return false; return true; public static String replaceAllString(String str, String pattern,String replaces) StringBuffer result = new StringBuffer(

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

12、g fileName,String path) TelnetInputStream fget; String xmlString =null ; String encoding = System.getProperty(file.encoding); String temp; try if(path !=null) client.cd(path); fget=client.get(fileName); / InputStreamReader s=new InputStreamReader(fget,GB2312);/接收的字符集需要和要下载的文件最好字符集一样,否则在中文时候会有乱码 Inpu

13、tStreamReader s=new InputStreamReader(fget,UTF-8); BufferedReader in=new BufferedReader(s); StringBuffer sb = new StringBuffer(); while( (temp=in.readLine() !=null) sb.append(temp.trim(); sb.append(n); xmlString =sb.toString(); s.close(); catch (IOException e) / TODO Auto-generated catch block e.pri

14、ntStackTrace(); return null; return xmlString; 通过在另一个java存储过程调用以上的以上ftp存储过程,能够实现ftp文件的上传下载例如: create or replace and compile java source named ftpSendGetTest ASpackage oracle.apps.zz.zzmes;import java.sql.Clob;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;im

15、port java.util.Hashtable;import oracle.xml.sql.query.OracleXMLQuery;import java.io.*;import sun.ftp.FtpClient;import oracle.sql.*;import oracle.jdbc.OracleDriver;import java.sql.Connection;public class ftpSendGetTest /实现ftp下载,并转换为xml文件格式并返回clob public static CLOB getXml(String host,String username,S

16、tring pwd,String fileName ,String path) String xml= ; CLOB tempClob=null; /ftp类构造 remoteFtpClient fc = new remoteFtpClient( host, username,pwd); if(fc.getFtpConnection() /连接ftp xml = fc.loadXml2Temp(fileName, path); /调用下载函数 if(xml !=null) try /实现String转换为clob Connection conn = new OracleDriver().def

17、aultConnection(); tempClob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION); tempClob.open(CLOB.MODE_READWRITE); Writer tempClobWriter = tempClob.getCharacterOutputStream(); tempClobWriter.write(xml); tempClobWriter.flush(); tempClobWriter.close(); tempClob.close(); conn.close(); catch (SQL

18、Exception e) / TODO Auto-generated catch block e.printStackTrace(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); fc.closeConnection(); /关闭ftp连接 return tempClob; /发送数据到ftp public static String sendxml(String host,String username,String pwd,String fileName ,String path,

19、String content) String b=N; remoteFtpClient fc = new remoteFtpClient( host, username,pwd); if(fc.getFtpConnection() /连接ftp if(fc.sendXml2Ftp(fileName, content,path) /发送文件 b=Y; fc.closeConnection(); /关闭ftp连接 return b; Pl/sql中实现ftp客户端操作在oracle中提供了数据库包 SYS.utl_tcp 实现客户端操作。ftp操作详细的能够查看该package. 举例一个简单的f

20、tp上传下载程序。ftp连接FUNCTION login (p_host IN VARCHAR2, p_port IN VARCHAR2, /ftp 端口 21 p_user IN VARCHAR2, p_pass IN VARCHAR2, p_timeout IN NUMBER := NULL) RETURN UTL_TCP.connection IS l_conn UTL_TCP.connection;BEGIN l_conn := UTL_TCP.open_connection(p_host, p_port, tx_timeout = p_timeout); get_reply (l_c

21、onn); send_command(l_conn, USER | p_user); send_command(l_conn, PASS | p_pass); RETURN l_conn;END;ftp关闭连接PROCEDURE logout(p_conn IN OUT NOCOPY UTL_TCP.connection, p_reply IN BOOLEAN := TRUE) ASl_reply t_string_table := t_string_table();BEGIN send_command(p_conn, QUIT, l_reply); UTL_TCP.close_connect

22、ion(p_conn);END;ftp下载FUNCTION get_remote_data (p_conn IN OUT NOCOPY UTL_TCP.connection, p_file IN VARCHAR2) RETURN CLOB IS l_conn UTL_TCP.connection; l_amount PLS_INTEGER; l_buffer VARCHAR2(32767); l_data CLOB;BEGIN DBMS_LOB.createtemporary (lob_loc = l_data, cache = TRUE, dur = DBMS_LOB.call); l_co

23、nn := get_passive(p_conn); send_command(p_conn, RETR | p_file, TRUE); BEGIN LOOP l_amount := UTL_TCP.read_text (l_conn, l_buffer, 32767); DBMS_LOB.writeappend(l_data, l_amount, l_buffer); END LOOP; EXCEPTION WHEN UTL_TCP.END_OF_INPUT THEN NULL; WHEN OTHERS THEN NULL; END; UTL_TCP.close_connection(l_

24、conn); RETURN l_data;EXCEPTION WHEN OTHERS THEN UTL_TCP.close_connection(l_conn); RAISE;END;ftp上传PROCEDURE send_xml (p_data IN CLOB, p_dir IN VARCHAR2, p_file IN VARCHAR2) IS l_out_file UTL_FILE.file_type; l_buffer VARCHAR2(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_clob_len INT

25、EGER;BEGIN l_clob_len := DBMS_LOB.getlength(p_data); l_out_file := UTL_FILE.fopen(p_dir, p_file, w, 32767); WHILE l_pos = l_clob_len LOOP DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer); IF g_convert_crlf THEN l_buffer := REPLACE(l_buffer, CHR(13), NULL); END IF; UTL_FILE.put(l_out_file, l_buffer); UTL_FILE.fflush(l_out_file); l_pos := l_pos + l_amount; END LOOP; UTL_FILE.fclose(l_out_file);EXCEPTION WHEN OTHERS THEN IF UTL_FILE.is_open(l_out_file) THEN UTL_FILE.fclose(l_out_file); END IF; RAISE;END;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com