首页 > 开发 > Java > 正文

java web FTPClient实现上传文件到指定服务器

2024-07-14 08:41:12
字体:
来源:转载
供稿:网友

FTPClient 实现上传文件到指定服务器,供大家参考,具体内容如下

调用

 FileInputStream in=new FileInputStream(new File(fileUrl));   moveFile("10.3.3.**", 21, "username", "password", path, filename, in);

方法

/**   * Description: 向FTP服务器上传文件   * @param url FTP服务器hostname   * @param port FTP服务器端口   * @param username FTP登录账号   * @param password FTP登录密码   * @param path FTP服务器保存目录   * @param filename 上传到FTP服务器上的文件名   * @param input 输入流   * @return 成功返回true,否则返回false   */ public static boolean moveFile(String url,int port,String username, String password, String path, String filename, InputStream input) {   boolean success = false;   FTPClient ftp = new FTPClient();   try {    int reply;    ftp.connect(url, port);//连接FTP服务器    //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器    ftp.login(username, password);//登录    reply = ftp.getReplyCode();    if (!FTPReply.isPositiveCompletion(reply)) {     ftp.disconnect();     return success;    }    //创建路径   try{    ftp.makeDirectory(path);   }catch(Exception e){       }   ftp.enterLocalPassiveMode();   ftp.changeWorkingDirectory(path);    boolean f= ftp.storeFile(filename, input);      logger.error(f);   input.close();    ftp.logout();    success = true;   } catch (IOException e) {    e.printStackTrace();   } finally {    if (ftp.isConnected()) {     try {      ftp.disconnect();     } catch (IOException ioe) {     }    }   }   return success; }

一些细节

FileInputStream.available()返回的实际可读字节数,也就是总大小。

FTPClient.storeFile()方法时,就停止在那里,什么反应都没有,出现假死状态。 
解决方法: 调用FTPClient.enterLocalPassiveMode() 
原 理: 因为ftp server可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞

FTP默认端口为21 SSH为22 实际传输端口为20

查看指定端口,例21 
netstat -na|grep 21(端口号)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表