您的位置:首页 > Web前端 > JavaScript

jsp ftp上传下载实例

2010-11-24 14:44 393 查看
虽然已经实现了FTP上传,但是目前却只能上传英文路径,该问题依旧等待解决的方案

一、所需软件:

FTP服务器:ServUSetup.exe 下载地址为:http://www.rhinosoft.com/__release/ServUSetup.exe

Java FTP 库edtFTPj/Free:下载地址为:http://www.enterprisedt.com/products/edtftpj/download/edtftpj.zip

二、edtFTPj/Free实现了以下功能

1、上传指定文件夹(包括子文件和文件夹) uploadFolder(String folderName, String ftpPath)

2、下载FTP上指定的文件夹 downloadFolder(String ftppath, String outdir, String ftpdir)

3、上传指定文件夹下的所有文件到FTP指定目录下 uploadAllFilesInFolder(String folderName, String ftpPath)

4、删除指定文件夹下的所有文件(包括子文件夹里面的文件,但由于不知怎么删除目录,所以暂没有做删除目录的功能) deleteAllFilesInFolder(String ftppath, String ftpdir)

5、删除指定文件 String deleteFile(String ftpPath)

6、判断FTP上目录是否存在 isDirExist(String dirname, String[] files)

7、上传单个文件 uploadFile(String clientFileName, String ftpPath)

8、下载单个文件 downloadFile(String remoteFileName,String localFileName)

9、删除指定文件夹下的所有文件(不包括子文件夹,只是删除指定文件夹下的文件)

三、实现过程

0、安装FTP服务器,配置域名、用户名、密码以及根目录

1、连接FTP服务器

/**************************************************************************

调用该构造函数的格式为:FtpService ftp=new FtpService("127.0.0.1","21","admin","admin");

打印效果如下则表示连接服务器成功

开始登录
登录成功
已转入根目录

**************************************************************************/

view plaincopy to clipboardprint?
/**
* 初始化连接
* @param pFtpServer FTP服务器地址
* @param pFtpPort FTP服务器端口
* @param pFtpUserName FTP登录用户名
* @param pFtpPassword FTP登录密码
* @throws IOException
*/
public FtpService(String pFtpServer, String pFtpPort, String pFtpUserName,String pFtpPassword) throws Exception
{
this.ftpServer = pFtpServer;
if (pFtpPort.trim().equals(""))
this.ftpPort = "21";
else
this.ftpPort = pFtpPort;
if (pFtpUserName.trim().equals(""))
this.ftpUserName = "Anonymous";
else
this.ftpUserName = pFtpUserName;
this.ftpPassword = pFtpPassword;
try {
ftpClient = new FTPClient(); //ftpServer, Integer.parseInt(ftpPort)
ftpClient.setRemoteHost(ftpServer);
ftpClient.setRemotePort(Integer.parseInt(ftpPort));
ftpClient.setControlEncoding("gbk"); //加上这一句后在 edtftpj 2.0.1 下就可以传中文文件名了
System.out.println("开始登录");
ftpClient.connect();
ftpClient.login(ftpUserName, ftpPassword);
System.out.println("登录成功");
ftpClient.chdir("//"); //在有的ftp服务器运行会出错,用ftpClient.chdir("/")又可以了
System.out.println("已转入根目录");
isLogin = true;
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}
/**
* 初始化连接
* @param pFtpServer FTP服务器地址
* @param pFtpPort FTP服务器端口
* @param pFtpUserName FTP登录用户名
* @param pFtpPassword FTP登录密码
* @throws IOException
*/
public FtpService(String pFtpServer, String pFtpPort, String pFtpUserName,String pFtpPassword) throws Exception
{
this.ftpServer = pFtpServer;
if (pFtpPort.trim().equals(""))
this.ftpPort = "21";
else
this.ftpPort = pFtpPort;
if (pFtpUserName.trim().equals(""))
this.ftpUserName = "Anonymous";
else
this.ftpUserName = pFtpUserName;
this.ftpPassword = pFtpPassword;
try {
ftpClient = new FTPClient(); //ftpServer, Integer.parseInt(ftpPort)
ftpClient.setRemoteHost(ftpServer);
ftpClient.setRemotePort(Integer.parseInt(ftpPort));
ftpClient.setControlEncoding("gbk"); //加上这一句后在 edtftpj 2.0.1 下就可以传中文文件名了
System.out.println("开始登录");
ftpClient.connect();
ftpClient.login(ftpUserName, ftpPassword);
System.out.println("登录成功");
ftpClient.chdir("//"); //在有的ftp服务器运行会出错,用ftpClient.chdir("/")又可以了
System.out.println("已转入根目录");
isLogin = true;
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}

2、实现上传文件函数:上传指定文件夹下的所有文件到FTP指定目录下
view plaincopy to clipboardprint?
/**
* 上传指定文件夹下的所有文件到FTP指定目录下
* @param folderName 本地要上传的文件夹全路径
* @param ftpPath FTP上对于根目录的路径
* @throws IOException
*/
public void uploadAllFilesInFolder(String folderName, String ftpPath) throws
Exception {
if (isLogin) {
String strMsg = "";
try {
File file = new File(folderName);
if (file.isDirectory()) {
ftpClient.chdir("//");
ftpClient.setType(FTPTransferType.BINARY);
if (checkFolderIsExist(ftpPath)) {
ftpClient.chdir(ftpPath);
} else {
createFolder(ftpPath);
}
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
try {
ftpClient.put(files[i].getPath(),
files[i].getName());
} catch (Exception ee) {
strMsg += "upload file<<:" + files[i].getPath() +
">> error!Message:" + ee.getMessage() +
"/r/n";
}
}
}
} else {
throw new Exception(folderName + " is not a folder'name!");
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
} else {
throw new Exception("you didnot login remote ftp server!");
}
}
/**
* 上传指定文件夹下的所有文件到FTP指定目录下
* @param folderName 本地要上传的文件夹全路径
* @param ftpPath FTP上对于根目录的路径
* @throws IOException
*/
public void uploadAllFilesInFolder(String folderName, String ftpPath) throws
Exception {
if (isLogin) {
String strMsg = "";
try {
File file = new File(folderName);
if (file.isDirectory()) {
ftpClient.chdir("//");
ftpClient.setType(FTPTransferType.BINARY);
if (checkFolderIsExist(ftpPath)) {
ftpClient.chdir(ftpPath);
} else {
createFolder(ftpPath);
}
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
try {
ftpClient.put(files[i].getPath(),
files[i].getName());
} catch (Exception ee) {
strMsg += "upload file<<:" + files[i].getPath() +
">> error!Message:" + ee.getMessage() +
"/r/n";
}
}
}
} else {
throw new Exception(folderName + " is not a folder'name!");
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
} else {
throw new Exception("you didnot login remote ftp server!");
}
}

3、实现上传单个文件函数

view plaincopy to clipboardprint?
/**
* 上传单个文件 uploadFile(String clientFileName, String ftpPath)
* @param clientFileName 本地要上传的文件的全路径
* @param ftpPath FTP上对于根目录的路径
* @throws IOException
*/
public void uploadFile(String clientFileName, String ftpPath) throws
Exception {
if (isLogin) {
try {
//获取文件名
String filename = "";
int index = clientFileName.lastIndexOf("//");
filename = clientFileName.substring(index + 1);
ftpClient.chdir("//");
ftpClient.setType(FTPTransferType.BINARY);
if (checkFolderIsExist(ftpPath)) {
ftpClient.chdir(ftpPath);
} else {
createFolder(ftpPath);
}
ftpClient.put(clientFileName, filename);
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
} else {
throw new Exception("you didnot login remote ftp server!");
}
}
/**
* 上传单个文件 uploadFile(String clientFileName, String ftpPath)
* @param clientFileName 本地要上传的文件的全路径
* @param ftpPath FTP上对于根目录的路径
* @throws IOException
*/
public void uploadFile(String clientFileName, String ftpPath) throws
Exception {
if (isLogin) {
try {
//获取文件名
String filename = "";
int index = clientFileName.lastIndexOf("//");
filename = clientFileName.substring(index + 1);
ftpClient.chdir("//");
ftpClient.setType(FTPTransferType.BINARY);
if (checkFolderIsExist(ftpPath)) {
ftpClient.chdir(ftpPath);
} else {
createFolder(ftpPath);
}
ftpClient.put(clientFileName, filename);
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
} else {
throw new Exception("you didnot login remote ftp server!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: