Apache common FTP(六)

2014-11-24 02:43:15 · 作者: · 浏览: 5
// 设置PassiveMode传输

ftpClient.enterLocalPassiveMode();

// 设置以二进制流的方式传输

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

ftpClient.setControlEncoding("GBK");

UploadStatus result;

// 对远程目录的处理

String remoteFileName = remote;

if (remote.contains("/")) {

remoteFileName = remote.substring(remote.lastIndexOf("/") + 1);

// 创建服务器远程目录结构,创建失败直接返回

if (createDirecroty(remote, ftpClient) == UploadStatus.CreateDirectoryFail) {

return UploadStatus.CreateDirectoryFail;

}

}

// 检查远程是否存在文件

FTPFile[] files = ftpClient.listFiles(new String(remoteFileName

.getBytes("GBK"), "iso-8859-1"));

if (files.length == 1) {

long remoteSize = files[0].getSize();

File f = new File(local);

long localSize = f.length();

if (remoteSize == localSize) { // 文件存在

return UploadStatus.FileExits;

} else if (remoteSize > localSize) {

return UploadStatus.RemoteFileBiggerThanLocalFile;

}

// 尝试移动文件内读取指针,实现断点续传

result = uploadFile(remoteFileName, f, ftpClient, remoteSize);

// 如果断点续传没有成功,则删除服务器上文件,重新上传

if (result == UploadStatus.UploadFromBreakFailed) {

if (!ftpClient.deleteFile(remoteFileName)) {

return UploadStatus.DeleteRemoteFaild;

}

result = uploadFile(remoteFileName, f, ftpClient, 0);

}

} else {

result = uploadFile(remoteFileName, new File(local), ftpClient, 0);

}

return result;

}

/**

* 递归创建远程服务器目录

* @param remote 远程服务器文件绝对路径

* @param ftpClient FTPClient对象

* @return 目录创建是否成功

* @throws IOException

*/

public UploadStatus createDirecroty(String remote, FTPClient ftpClient)

throws IOException {

UploadStatus status = UploadStatus.CreateDirectorySuccess;

String directory = remote.substring(0, remote.lastIndexOf("/") + 1);

if (!directory.equalsIgnoreCase("/")

&& !ftpClient.changeWorkingDirectory(new String(directory

.getBytes("GBK"), "iso-8859-1"))) {