FTP文件上传-grails shell ftp 上传文件

[java]
import java.io.IOException;

import org.apache.commons.net.ftp.FTP
import org.apache.commons.net.ftp.FTPClient
importorg.apache.commons.net.ftp.FTPClientConfig
import org.apache.commons.net.ftp.FTPFile
import org.apache.commons.net.ftp.FTPReply


class FtpUtils {
/**
* 用于连接ftp服务器并配置相关信息
* @return
*/
defconnect(){<<span id="7_nwp">prename="code">//获取配置信息,读取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
*/
defuploadFile(String filename, File file){
FTPClient ftp = connect();
FTPClientConfig conf=newFTPClientConfig(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服务器上传文件
* @paramftpPath 上传到FTP上的路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramfilename 上传到FTP服务器上的文件名
* @paraminput 输入流
* @return成功返回true,否则返回false
*/
public booleanuploadFile(String ftpPath, String filename, InputStream input){
boolean success = false;
FTPClient ftp = null;
try {
ftp = connect()
FTP文件上传-grails shell ftp 上传文件
FTPClientConfig conf=newFTPClientConfig(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) {
}
}
}
return success;
}
/**
*递归进入所需要进入的目录下面
* @paramremote 路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramftpClient ftp客户端
*@return
*/
def changeDirecroty(Stringremote,FTPClient ftpClient){
String directory =remote.substring(0,remote.lastIndexOf("/")+1);
if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
int start=0;
int end = 0;
if(directory.startsWith("/")){
start = 1;
}else{
start = 0;
}
end = directory.indexOf("/",start);
while(true){
String subDirectory =remote.substring(start,end)
if(!ftpClient.changeWorkingDirectory(subDirectory)){
return false;
}

start = end + 1;
end = directory.indexOf("/",start);

//检查所有目录递归完毕
if(end <= start){
break;
}
}
}
return true
}
/**
*读所传的路径,然后判断在FTP上面是否有该路径,没有则创建
* @paramremote 路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramftpClient ftp客户端,通过connect()方法得到
*@return
*/
def createDirecroty(Stringremote,FTPClient ftpClient){
String directory =remote.substring(0,remote.lastIndexOf("/")+1);
if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
int start=0;
int end = 0;
if(directory.startsWith("/")){
start = 1;
}else{
start = 0;
}
end = directory.indexOf("/",start);
while(true){
String subDirectory =remote.substring(start,end)
if(!ftpClient.changeWorkingDirectory(subDirectory)){
if(ftpClient.makeDirectory(subDirectory)){
ftpClient.changeWorkingDirectory(subDirectory);
}else {
System.out.println("创建目录失败");
return false;
}
}

start = end + 1;
end = directory.indexOf("/",start);

//检查所有目录是否创建完毕
if(end <= start){
break;
}
}
}
return true
}
/**
*判断文件是否存在ftp服务器上
* @paramremote 路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramfileName
*@return
*/
def isExist(String filePath,String fileName){
Boolean success = false;
FTPFile[] files = null;
FTPClient client = null;
try {
client = connect()
changeDirecroty(filePath, client)
files = client.listFiles();
client.setFileType(FTP.BINARY_FILE_TYPE);
for (FTPFile f : files) {
if (f.getName().equals(fileName)) {
success = true;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
try {
client.logout();
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return success;
}

/**
*通过FTP上面的文件的文件名查找到这个文件,然后返回客户端
* @paramremote 路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramfileName
* @returnInputStream
*/
def download(String filePath,String fileName,OutputStream out) {
FTPClient client = connect()
changeDirecroty(filePath, client)
if(isExist(filePath,fileName)){
client.retrieveFile(fileName, out);
}
}
/**
* 附件删除
* @paramremote 路径如"/test/img/" 一定要以"/"开头并且以"/"结束
* @paramfileName
*@return
*/
def delete(String filePath,String fileName){
boolean success = false
FTPClient client = connect()
if(isExist(filePath, fileName)){
client.deleteFile(fileName)
success = true
}
return success
}

}





FtpUtils.groovy配置文件如下:


/ **
* 配置上传到FTP服务器的属性
* server:FTP地址、
* user:用户名
* password:密码
* path:存放在FTP上的路径
* /
FtpProperty {
url = "191.0.4.17"
port = 21
username = "aa"
password = "aa"
path = "/"
}


接下来是Controller的代码
<<spanid="3_nwp">prename="code">//上传代码
MultipartHttpServletRequest multiRequest =(MultipartHttpServletRequest) request
CommonsMultipartFile orginalFile = (CommonsMultipartFile)multiRequest.getFile("uploadfile")
InputStream input =orginalFile.getInputStream()
//saveFtpFileName为传到FTP上所需要存放的名字
if(ftpUtils.uploadFile("/测试新建文件夹/",saveFtpFileName,input)){
msg ="文件上传成功"
}else{
msg = "文件上传失败"
}</<spanid="1_nwp">pre>

Controller中上传代码是用到了spring封装的上传方法

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/39138.html

更多阅读

怎样使用LeapFTP上传文件 leapftp使用教程

本例用 LeapFTP v2.75 说明如何上传。怎样使用LeapFTP上传文件——工具/原料LeapFTP v2.75 怎样使用LeapFTP上传文件——步骤/方法怎样使用LeapFTP上传文件 1、下载安装leapftp。然后启动LeapFTP怎样使用LeapFTP上传文件 2、点 "Ad

怎样申请ftp空间 如何申请ftp上传空间

什么是FTP空间,这里先跟大家说说吧,简单说我们存放网页的,也就是说我们可以通过FTP软件来上传和下载的空间,通常我们个人用户都是把网站放在FTP空间里面,然后通过空间提供商给的域名来进行访问,那要怎样申请FTP空间,FTP空间有分为免费的F

FlashFXP使用方法 flashfxp自动上传文件

FlashFXP使用方法——简介软件介绍功能强大的FXP/FTP软件,融合了一些其他优秀FTP软件的优点,如:像CuteFTP一样可以比较文件夹,支持彩色文字显示;像BpFTP支持多文件夹选择文件,能够缓存文件夹;像LeapFTP一样的外观界面,甚至设计思路也差

ftp上传时数据Socket错误连接超时 ftp上传错误

使用的FTP软件:flashfxp设置方法:选项->参数设置->链接->去掉“使用被动模式”就是把里面的使用被动模式的对勾去掉即可其他的 ftp上传的软件 改动如下:★Cute FTP3.5英文版:FTP—>Settings—>Options—>Firewall,将“PASVmode”前复选框中

声明:《FTP文件上传-grails shell ftp 上传文件》为网友哥特式墮落分享!如侵犯到您的合法权益请联系我们删除