java使用ftp下载远程服务器文件
第一种方法
连接中带有账号密码直接远程下载:
public result<?> download(){ //进行下载文件---------------------------------开始 //远程服务器下载地址 string fileurl = "ftp://superadmin:superadmin123@192.168.1.8:8888/usr/mp4pt/rec/chn0/10110120011100/00001.mp4"; //文件物理路径 string realfilepath = "f:/rhsftdemo/00001.mp4"; //本地中新建文件夹目录 file file = new file("f:/rhsftdemo/"); if (!file.exists()) { file.mkdirs(); } log.info("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl); download(fileurl,realfilepath); return result.ok(); } private static final int buffer_size = 4096; public void download(string ftpurl,string savepath){ long starttime = system.currenttimemillis(); // string ftpurl = "ftp://ftp.f-secure.com/misc/unixutil/skeysrcs.zip"; string file = ""; // name of the file which has to be download string host = ""; // ftp server string user = ""; // user name of the ftp server string pass = ""; // password of the ftp server // string savepath = "f:\\skeysrcs.zip"; ftpurl = string.format(ftpurl, user, pass, host); system.out.println("connecting to ftp server"); try { url url = new url(ftpurl); urlconnection conn = url.openconnection(); inputstream inputstream = conn.getinputstream(); long filesize = conn.getcontentlength(); system.out.println("size of the file to download in kb is:-" + filesize / 1024); fileoutputstream outputstream = new fileoutputstream(savepath); byte[] buffer = new byte[buffer_size]; int bytesread = -1; while ((bytesread = inputstream.read(buffer)) != -1) { outputstream.write(buffer, 0, bytesread); } long endtime = system.currenttimemillis(); system.out.println("file downloaded"); system.out.println("download time in sec. is:-" + (endtime - starttime) / 1000); outputstream.close(); inputstream.close(); } catch (ioexception ex) { ex.printstacktrace(); } }
第二种方法
通过账号密码登录后进行下载:
public result<?> download(){ //进行下载文件---------------------------------开始 //远程服务器下载地址 string fileurl = "ftp://192.168.1.8:8888/usr/mp4pt/rec/chn0/20220420095100/00001.mp4"; //本地文件物理路径 string realfilepath = "f:/rhsftdemo/00001.mp4"; //本地中新建文件夹目录 file file = new file("f:/rhsftdemo/"); if (!file.exists()) { file.mkdirs(); } log.info("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl); boolean bb = retepasvfile(realfilepath,fileurl,"00001.mp4"); return result.ok(); } /** * 本地保存 * * @param localurl 本地文件物理路径 * @param hosturl 远程服务器下载地址 * @param filename 文件名称 * * @return */ public synchronized boolean retepasvfile(string localurl, string hosturl, string filename) { ftpclient ftp = new ftpclient(); boolean re = false; try { log.info("本地存储路径==:" + localurl); file file = fileutil.getfile(localurl); ftp.setconnecttimeout(10000); ftp.setdatatimeout(10000); ftp.connect("192.168.1.8", 21); if (!org.springframework.util.stringutils.isempty("admin") && !org.springframework.util.stringutils.isempty("superadmin123") && "superadmin" != "null" && "superadmin123" != "null") { //这里输入账号密码 ftp.login("superadmin", "superadmin123"); } else { log.info("开始链接ftp:"); ftp.login("anonymous", "anonymous"); } //ftp.bin(); // string str=ftp.pwd(); ftp.enterlocalpassivemode(); //被动模式 ftp.setcontrolkeepalivetimeout(60); ftp.setfiletype(ftp.binary_file_type); boolean b = ftp.changeworkingdirectory(hosturl.substring(0, hosturl.lastindexof("/"))); log.info("pwd:" + b + "---切换目录:" + hosturl.substring(0, hosturl.lastindexof("/"))); long locationsize = file.length();//服务器上文件的大小 if (b) { boolean res = false; res = ftp.retrievefile(filename, new fileoutputstream(file)); if (res) { //ftp.disconnect(); log.info("文件下载完成"); re = true; } else { log.info("文件下载失败"); //ftp.disconnect(); } } } catch (exception e) { e.getstacktrace(); log.error("retepasvfilesamba:e=3" + e); } finally { try { ftp.disconnect(); } catch (exception e) { } } return re; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论