|
|
|
@ -0,0 +1,133 @@
|
|
|
|
|
package com.common.commonlib.utils
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.net.ftp.FTP
|
|
|
|
|
import org.apache.commons.net.ftp.FTPClient
|
|
|
|
|
import org.apache.commons.net.ftp.FTPReply
|
|
|
|
|
import java.io.BufferedOutputStream
|
|
|
|
|
import java.io.FileInputStream
|
|
|
|
|
import java.io.FileOutputStream
|
|
|
|
|
import java.io.IOException
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* FTP工具类
|
|
|
|
|
*/
|
|
|
|
|
object FTPUtils {
|
|
|
|
|
/**
|
|
|
|
|
* 默认缓冲池大小
|
|
|
|
|
*/
|
|
|
|
|
private const val DEFAULT_BUFFER_SIZE = 1024
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认编码模式
|
|
|
|
|
*/
|
|
|
|
|
private const val DEFAULT_ENCODING = "UTF-8"
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 结果
|
|
|
|
|
*/
|
|
|
|
|
enum class RESULT { SUCCESS, FAILED }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ftp上传
|
|
|
|
|
* @param url ftp地址
|
|
|
|
|
* @param port ftp连接端口号
|
|
|
|
|
* @param username 登录用户名
|
|
|
|
|
* @param password 登录密码
|
|
|
|
|
* @param fileNamePath 本地文件保存路径
|
|
|
|
|
* @param fileName 本地文件名
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
fun ftpUpload(
|
|
|
|
|
url: String?,
|
|
|
|
|
port: String,
|
|
|
|
|
username: String?,
|
|
|
|
|
password: String?,
|
|
|
|
|
fileNamePath: String,
|
|
|
|
|
fileName: String
|
|
|
|
|
): RESULT {
|
|
|
|
|
val ftpClient = FTPClient()
|
|
|
|
|
val fis: FileInputStream?
|
|
|
|
|
var returnMessage = RESULT.FAILED
|
|
|
|
|
try {
|
|
|
|
|
ftpClient.connect(url, port.toInt())
|
|
|
|
|
val loginResult = ftpClient.login(username, password)
|
|
|
|
|
val returnCode = ftpClient.replyCode
|
|
|
|
|
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) { // 如果登录成功
|
|
|
|
|
ftpClient.bufferSize = DEFAULT_BUFFER_SIZE
|
|
|
|
|
ftpClient.controlEncoding = DEFAULT_ENCODING
|
|
|
|
|
ftpClient.setFileType(FTP.BINARY_FILE_TYPE)
|
|
|
|
|
ftpClient.enterLocalPassiveMode()
|
|
|
|
|
fis = FileInputStream(fileNamePath + fileName)
|
|
|
|
|
ftpClient.storeFile(fileName, fis)
|
|
|
|
|
returnMessage = RESULT.SUCCESS //上传成功
|
|
|
|
|
} else { // 如果登录失败
|
|
|
|
|
returnMessage = RESULT.FAILED
|
|
|
|
|
}
|
|
|
|
|
} catch (e: IOException) {
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
returnMessage = RESULT.FAILED
|
|
|
|
|
} finally {
|
|
|
|
|
try {
|
|
|
|
|
ftpClient.disconnect()
|
|
|
|
|
} catch (e: IOException) {
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
throw RuntimeException("关闭FTP连接发生异常!", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return returnMessage
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ftp下载
|
|
|
|
|
* @param url
|
|
|
|
|
* @param port
|
|
|
|
|
* @param username
|
|
|
|
|
* @param password
|
|
|
|
|
* @param filePath 存放文件的路径
|
|
|
|
|
* @param FTP_file 要下载的文件名
|
|
|
|
|
* @param SD_file 本地文件名
|
|
|
|
|
*/
|
|
|
|
|
fun ftpDown(
|
|
|
|
|
url: String?,
|
|
|
|
|
port: Int,
|
|
|
|
|
username: String?,
|
|
|
|
|
password: String?,
|
|
|
|
|
filePath: String,
|
|
|
|
|
FTP_file: String?,
|
|
|
|
|
SD_file: String
|
|
|
|
|
): RESULT {
|
|
|
|
|
val buffOut: BufferedOutputStream?
|
|
|
|
|
val ftpClient = FTPClient()
|
|
|
|
|
var returnMessage = RESULT.FAILED
|
|
|
|
|
try {
|
|
|
|
|
ftpClient.connect(url, port)
|
|
|
|
|
val loginResult = ftpClient.login(username, password)
|
|
|
|
|
val returnCode = ftpClient.replyCode
|
|
|
|
|
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) { // 如果登录成功
|
|
|
|
|
ftpClient.bufferSize = DEFAULT_BUFFER_SIZE
|
|
|
|
|
ftpClient.controlEncoding = DEFAULT_ENCODING
|
|
|
|
|
ftpClient.enterLocalPassiveMode()
|
|
|
|
|
buffOut = BufferedOutputStream(FileOutputStream(filePath + SD_file), 8 * 1024)
|
|
|
|
|
ftpClient.retrieveFile(FTP_file, buffOut)
|
|
|
|
|
buffOut.flush()
|
|
|
|
|
buffOut.close()
|
|
|
|
|
ftpClient.logout()
|
|
|
|
|
ftpClient.disconnect()
|
|
|
|
|
returnMessage = RESULT.SUCCESS //上传成功
|
|
|
|
|
} else { // 如果登录失败
|
|
|
|
|
returnMessage = RESULT.FAILED
|
|
|
|
|
}
|
|
|
|
|
} catch (e: IOException) {
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
throw java.lang.RuntimeException("FTP客户端出错!", e)
|
|
|
|
|
} finally {
|
|
|
|
|
try {
|
|
|
|
|
ftpClient.disconnect()
|
|
|
|
|
} catch (e: IOException) {
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
throw java.lang.RuntimeException("关闭FTP连接发生异常!", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return returnMessage
|
|
|
|
|
}
|
|
|
|
|
}
|