Java的FTP工具类

package com.idaima.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
public class FtpUtil {
private static String getStatusMsg(int code) {
String msg = "";
switch (code) {
case 226:
msg = "命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。";
break;
case 230:
msg = "客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。";
break;
case 331:
msg = "客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。";
break;
case 426:
msg = "命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。";
break;
case 530:
msg = "该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。";
break;
case 550:
msg = "命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。";
default:
msg = "没有找到合适的错误信息解释,当前状态码:" + code;
}
return msg;
}
public static boolean uploadFile(String url, int port, String username,
String password, String path, String filename, InputStream input,String encoding) {
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
if(!ftp.login(username, password)){
throw new ApplicationException("FTP登录失败");
}
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
log.debug("FTP连接失败: 状态码:" + reply + " 描述:"
+ getStatusMsg(reply));
throw new ApplicationException("FTP连接失败: 状态码:" + reply + " 描述:"
+ getStatusMsg(reply));
}
ftp.enterLocalPassiveMode();
ftp.makeDirectory(path);
ftp.setBufferSize(1024);
ftp.setControlEncoding(encoding);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
if(!ftp.changeWorkingDirectory(path)){
throw new ApplicationException("FTP跳转目录失败,目标目录:"+path);
}
if(!ftp.storeFile(filename, input)){
throw new ApplicationException("FTP保存文件失败,路径:"+path+" 文件名:"+filename);
}
input.close();
ftp.logout();
} catch (Exception e) {
log.error("",e);
throw new ApplicationException(e.getMessage());
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
log.error("关闭ftp链接发生异常",ioe);
}
}
}
return true;
}
/**
* 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 uploadFile(String url, int port, String username,
String password, String path, String filename, InputStream input) {
return uploadFile(url, port, username, password, path, filename, input,"GBK");
}
public static void main(String[] args) throws FileNotFoundException {
FileInputStream f = new FileInputStream(
"C:/Users/Administrator/Pictures/11.jpg");
boolean b = uploadFile("IP", 21,"用户名", "密码", "./tmp/", "121.jpg", f);

System.out.println(b);
}
private static Logger log = Logger.getLogger(FtpUtil.class);
}

#Java#
追加内容 2017-03-21 10:38:31
追加测试!

评论0

  • 没有任何评论
评论请先登录

最近热帖

  1. 我才是第一名 38378
  2. 谁能超过我 23917
  3. 本站源码easyQA下载地址及安装配置文档 6107
  4. 百度的无刷新搜索,并不仅仅是使用了ajax,还有它的功劳! 4346
  5. 本站用的是什么富文本编辑器呢? 3253
  6. 本站源码下载及安装配置教程 2860
  7. (● ̄(エ) ̄●) 恳请大家不要发布无意义的测试帖子吧,测试也可以发有意义的文字呀 2790
  8. 我把它改成潮流分享的社区了。。。囧 2489
  9. 关于thinkphp图片上传插件,ajax+无刷新。 2466
  10. 本站源码的开源开发进度与意见反馈 1963

近期热议

  1. 本站源码easyQA下载地址及安装配置文档 56
  2. (● ̄(エ) ̄●) 恳请大家不要发布无意义的测试帖子吧,测试也可以发有意义的文字呀 24
  3. 社区新使用了又拍云来存储图片,测试一下上传图片 18
  4. 仔细从V型注册v 18
  5. 本站源码下载及安装配置教程 17
  6. 提问与回答增加上传图片、添加代码、表情、颜表情功能 15
  7. 百度的无刷新搜索,并不仅仅是使用了ajax,还有它的功劳! 14
  8. 本站用的是什么富文本编辑器呢? 13
  9. 你这个网站的搜索框 13
  10. 本站源码的开源开发进度与意见反馈 12