关于Grails中FTP(apache)上传下载删除等功能的实现
这个工具类是对Apache的Ftp的操作
[java]
import java.io.IOException;
import org.apache.commons.net.ftp.FTP
import org.apache.commons.net.ftp.FTPClient
import org.apache.commons.net.ftp.FTPClientConfig
import org.apache.commons.net.ftp.FTPFile
import org.apache.commons.net.ftp.FTPReply
class FtpUtils {
/**
* 用于连接ftp服务器并配置相关信息
* @return
*/
def connect(){<pre name="code" class="java"> //获取配置信息,读取grails工程下target/classes文件夹下的FtpProperty.groovy
def config = new ConfigSlurper().parse( new File( "${System.properties['user.dir']}/target/classes/FtpProperty.groovy" ).toURL())
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("UTF-8");
int reply;
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
if(config.FtpProperty.port){
ftp.connect(config.FtpProperty.url, config.FtpProperty.port);
}else{
ftp.connect(config.FtpProperty.url)
}
//登录
ftp.login(config.FtpProperty.username, config.FtpProperty.password);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
//指定目录
ftp.changeWorkingDirectory(config.FtpProperty.path);
return ftp;
}
/**
* 上传文件到ftp服务器上
* @param filename 文件名
* @param file 上传的文件
* @return
*/
def uploadFile(String filename, File file){
FTPClient ftp = connect();
FTPClientConfig conf=new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
ftp.configure(conf);
ftp.setFileType(FTP.BINARY_FILE_TYPE); //使用二进制流上传文件
file.withInputStream {ostream ->
ftp.storeFile(filename, ostream)
ostream.close()
}
ftp.logout();
ftp.disconnect()
}
/**
* Description: 向FTP服务器上传文件
* @param ftpPath 上传到FTP上的路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
public boolean uploadFile(String ftpPath, String filename, InputStream input) {
boolean success = false;
FTPClient ftp = null;
try {
ftp = connect()
FTPClientConfig conf=new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
ftp.configure(conf);
ftp.setFileType(FTP.BINARY_FILE_TYPE); //使用二进制流上传文件
if(ftpPath != null && ftpPath != "" && ftpPath.contains("/")){
//创建服务器远程目录结构,创建失败直接返回
if(!createDirecroty(ftpPath, ftp)){
return false;
}
// changeDirecroty(ftpPath,ftp)
}
ftp.storeFile(filename, input);
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
input.close();
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
补充:软件开发 , Java ,