python从ftp下载文件,python ftp文件上传
目前项目内部需求是将FTP文件服务器上的各类office和pdf文件读取出来返回给前端进行预览展示
1 .配置文件传送协议访问信息并读取配置
/** * ftp配置信息*/@ component @ configuration properties(前缀= FTP。服务器)数据发布类属性配置(/DDD/*)登录用户名* /私有字符串用户名称;/** *密码* /私有字符串密码;}
2 .实现文件传送协议工具类
进口港.Apache.com蒙斯客户端;importorg。Apache.com蒙斯。网。FTP。文件传送协议文件;importorg。Apache.com蒙斯。网。FTP。文件传送协议回复;导入org。slf4j。记录者;导入org。SLF 4j。伐木工厂;导入组织。spring框架。豆子。工厂。注释。自动连线;进口。春天的framework.stereotype.com组件;导入javax.annotation.post构造;导入Java。io。io异常;导入Java。io。inputstream/** * FTP文件操作工具类*/@ componentpublicssftputils { privatestaticfinallogerlog=logger factory。获取日志程序(FTP实用程序.privatestaticftpropertiesconfigftppropertiesconfig;//注入文件传输协议(文件传输协议的缩写)配置@ autowiredprivateftpropertiesconfigftpconfig;@ post构造public void init()FTP utils。ftppropertiesconfig=FTP config}/***FTP服务器* * @ param主机文件传送协议服务器互联网协议(互联网协议)地址* @ param端口文件传送协议服务器端口* @ param用户名文件传送协议服务器登录用户名* @param password FTPServer登录密码@ return FTP client * @ throwsioexception */publistaticftpclientlog in(字符串主机,字符串stringPassion //防止中文目录乱码FTP客户端。setautodetectutf8(true);FTP客户端。setconnecttimeout(60000;//连接到文件传送协议服务器文件传送协议客户端。连接(主机,integer.valueof)端口;如果(FTP回复。ispositivecompletion(FTP客户端getreplycode () ) FTP服务器如果)FTP客户端。登录(用户名、密码)登录的服务器支持时用UTF-8编码,否则用本地编码(GBK).如果)FTP preply。ispositivecompletion)FTP } else { FTP客户端。setcontrolencoding( gbk);}
//设置传输的模式,以二进制流的方式读取FTP客户端。设置文件类型(FTP客户端.BINARY _ FILE _ TYPE);log.info(FTP服务连接成功!);}else { log.error(FTP服务用户名或密码错误!);断开连接(FTP客户端);} }else { log.error(连接到文件传送协议服务失败!);断开连接(FTP客户端);}返回FTP客户端} /** *关闭文件传送协议服务链接* @抛出io异常*/私有静态void断开(FTP客户端FTP客户端)抛出IOException { if(null!=FTP客户端FTP客户端。已连接()){ FTP客户端。disconnect();} } /** * 获取文件夹下的所有文件信息* @param路径文件路径*/public static FTP file[]getFTPDirectoryFiles(字符串路径)抛出io异常{ FTP file[]files=null;FTP client FTP client=nulltry { FTP client=log in(ftppropertiesconfig。获取host()、ftpPropertiesConfig.getPort()、ftpPropertiesConfig。获取用户名()、ftppropertiesconfig。get password());//判断是否存在该目录如果(!FTP客户端。更改工作目录(路径)){ log。错误(该目录不存在,文件路径= path);} //调用FTP客户端。enterlocalpassivemode();这个方法的意思就是每次数据连接之前,//ftpclient告诉文件传输协议(File Transfer Protocol的缩写)服务器开通一个端口来传输数据FTP客户端。enterlocalpassivemode();文件=FTP客户端。列出文件();}catch(异常e){ //关闭连接断开连接(FTP客户端);log.error(FTP读取数据异常!,e);}最后{断开连接(FTP客户端);}归还文件;} public static InputStream getftp filestream(字符串文件路径,字符串文件名)抛出io异常{ FTP客户端FTP客户端=null尝试{ FTP client=log in(ftppropertiesconfig。获取host()、ftpPropertiesConfig.getPort()、ftpPropertiesConfig。获取用户名()、ftppropertiesconfig。get password());//判断是否存在该目录如果(!FTP客户端。更改工作目录(文件路径)){ log。错误(该目录不存在,文件路径=文件路径);} //设置被动模式,开通一个端口来传输数据FTP客户端。enterlocalpassivemode();InputStream输入流=FTP客户端。检索文件流(文件名);返回输入流}捕捉(异常e){ //关闭连接断开连接(FTP客户端);log.error(FTP读取文件流异常!,e);}最后{断开连接(FTP客户端);}返回null}} /** *递归遍历出目录下面所有文件* @ param pathName * @ throws io exception */private void list files bykey(String pathName)throws io exception { if(pathName。以(/)路径名开头。结尾为(/){ FTP file[]files=ftputils。getftpdirectoryfiles(路径名);if(null==files){ return;} for(int I=0;我文件。长度;i ) { if(files[i].isFile()){ //如果是文件则进行处理字符串fileName=files[i].getName();//做某事}否则if (files[i].isDirectory()){ if(!.。等于(文件【我】。getName())!.。等于(文件【我】。getName()){ log。info( listFilesByKey:directory name= files[I].getName());//递归调用获取子目录下的文件listFilesByKey(路径名文件[我].getName()/);} } } } }
/** * 删除本地目录和文件* @ param文件路径* @ return */private boolean删除目录(字符串文件路径){ File dirFile=new File(文件路径);if(dirfile。是directory()){ File[]children=dirfile。列出文件();日志。信息(删除目录:文件计数=子级。长度);//递归删除目录中的子目录下for(int I=0;我。儿童。长度;i ) {如果(儿童[我].isFile()) { children[i].delete();日志。info( delete directory:remove fileName= children[I]。getAbsolutePath());} else {删除目录(子目录[I]).getAbsolutePath());} } } //删除为空目录日志。信息(删除目录:删除目录= dirfile。getabsolutepath());返回目录文件。delete();} 以上就是涉及文件传输协议(文件传输协议的缩写)文件的读取的操作方法,项目使用场景中暂无上传和更新的操作,如有纰漏欢迎吐槽。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。