java web FTPClient实现上传文件到指定服务器
FPClient实现上传文件到指定服务器,供大家参考,具体内容如下
调用
FileInputStreamin=newFileInputStream(newFile(fileUrl)); moveFile("10.3.3.**",21,"username","password",path,filename,in);
/** *Description:向FTP服务器上传文件 *@paramurlFTP服务器hostname *@paramportFTP服务器端口 *@paramusernameFTP登录账号 *@parampasswordFTP登录密码 *@parampathFTP服务器保存目录 *@paramfilename上传到FTP服务器上的文件名 *@paraminput输入流 *@return成功返回true,否则返回false */ publicstaticbooleanmoveFile(Stringurl,intport,Stringusername,Stringpassword,Stringpath,Stringfilename,InputStreaminput){ booleansuccess=false; FTPClientftp=newFTPClient(); try{ intreply; ftp.connect(url,port);//连接FTP服务器 //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username,password);//登录 reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnsuccess; } //创建路径 try{ ftp.makeDirectory(path); }catch(Exceptione){ } ftp.enterLocalPassiveMode(); ftp.changeWorkingDirectory(path); booleanf=ftp.storeFile(filename,input); logger.error(f); input.close(); ftp.logout(); success=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftp.isConnected()){ try{ ftp.disconnect(); }catch(IOExceptionioe){ } } } returnsuccess;}
一些细节
FileInputStream.available()返回的实际可读字节数,也就是总大小。
FTPClient.storeFile()方法时,就停止在那里,什么反应都没有,出现假死状态。
解决方法:调用FTPClient.enterLocalPassiveMode()
原理:因为ftpserver可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞
FTP默认端口为21SSH为22实际传输端口为20
查看指定端口,例21
netstat-na|grep21(端口号)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。