FTP上传下载工具

importcn.gwssi.zygl.config.ZyglConstant;

importorg.apache.commons.net.ftp.FTP;

importorg.apache.commons.net.ftp.FTPClient;

importorg.apache.commons.net.ftp.FTPFile;

importorg.apache.commons.net.ftp.FTPReply;

importjava.io.*;

/**

* @ProjectName: FTP上传下载工具类

* @Package: cn.gwssi.zygl.util

* @ClassName: FtpUtil

* @Description: java类作用描述

* @Author: 胡铭锋

* @CreateDate: 2018/4/16 9:53

* @Version: 1.0

*/

publicclassFtpUtil {

/**ftp服务器地址*/

publicstaticString host = ZyglConstant.FTP_CONFIG_HOST;

/**ftp服务器端口号默认为21*/

publicstaticInteger port = ZyglConstant.FTP_CONFIG_PORT ;

/**ftp登录账号*/

publicstaticString username = ZyglConstant.FTP_CONFIG_USERNAME;

/**ftp登录密码*/

publicstaticString password = ZyglConstant.FTP_CONFIG_PASSWORD;

/**FTP服务器基础目录*/

publicstaticString basePath = ZyglConstant.FTP_CONFIG_BASEPATH;

/** 本地字符编码 */

privatestaticString LOCAL_CHARSET ="GBK";

/** FTP协议里面,规定文件名编码为iso-8859-1 */

privatestaticString SERVER_CHARSET ="ISO-8859-1";

/**

* 向FTP服务器上传文件

* @param filePath FTP服务器文件存放路径。例如分日期存放:/2017/03/01。文件的路径为basePath+filePath

* @param filename 上传到FTP服务器上的文件名

* @param input 输入流

* @return 成功返回true,否则返回false

*/

publicstaticbooleanuploadFile(String filePath, String filename, InputStream input){

booleanresult =false;

FTPClient ftp =newFTPClient();

try{

filename =newString(filename.getBytes("GBK"),"ISO-8859-1");

// InputStream input = new FileInputStream(new File(inputfilename));

intreply;

ftp.connect(host, port);// 连接FTP服务器

// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器

ftp.login(username, password);// 登录

reply = ftp.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

returnresult;

}

//针对中文乱码问题

if(FTPReply.isPositiveCompletion(ftp.sendCommand(

"OPTS UTF8","ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).

LOCAL_CHARSET ="UTF-8";

}

ftp.setControlEncoding(LOCAL_CHARSET);

//切换到上传目录

if(!ftp.changeWorkingDirectory(basePath+filePath)) {

//如果目录不存在创建目录

String[] dirs = filePath.split("/");

String tempPath = basePath;

for(String dir : dirs) {

if(null== dir ||"".equals(dir))continue;

tempPath +="/"+ dir;

if(!ftp.changeWorkingDirectory(tempPath)) {

if(!ftp.makeDirectory(tempPath)) {

returnresult;

}else{

ftp.changeWorkingDirectory(tempPath);

}

}

}

}

//设置上传文件的类型为二进制类型

ftp.setFileType(FTP.BINARY_FILE_TYPE);

//上传文件

if(!ftp.storeFile(filename, input)) {

returnresult;

}

input.close();

ftp.logout();

result =true;

}catch(IOException e) {

e.printStackTrace();

}finally{

if(ftp.isConnected()) {

try{

ftp.disconnect();

}catch(IOException ioe) {

}

}

}

returnresult;

}

/**

* Description: 从FTP服务器下载文件

* @param remotePath FTP服务器上的相对路径

* @param fileName 要下载的文件名

* @param localPath 下载后保存到本地的路径

* @return

*/

publicstaticbooleandownloadFile(String remotePath, String fileName, String localPath) {

booleanresult =false;

FTPClient ftp =newFTPClient();

try{

intreply;

ftp.connect(host, port);

// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器

ftp.login(username, password);// 登录

reply = ftp.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

returnresult;

}

ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录

FTPFile[] fs = ftp.listFiles();

for(FTPFile ff : fs) {

if(ff.getName().equals(fileName)) {

File localFile =newFile(localPath +"/"+ ff.getName());

OutputStream is =newFileOutputStream(localFile);

ftp.retrieveFile(ff.getName(), is);

is.close();

}

}

ftp.logout();

result =true;

}catch(IOException e) {

e.printStackTrace();

}finally{

if(ftp.isConnected()) {

try{

ftp.disconnect();

}catch(IOException ioe) {

}

}

}

returnresult;

}

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180608G1AWNO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券