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;
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论